int main(int argc, char *argv[]) { (void)argc, (void)argv; unsigned char packet[MAX_PACKET_SIZE]; struct interface_data iface_data; unsigned char dest_mac[ETH_ALEN] = {0x90, 0x2b, 0x34, 0x1a, 0x5f, 0x04}; struct sockaddr_ll dest_address; const int packet_size = 64; unsigned char payload[4] = {0xde, 0xad, 0xbe, 0xef}; int sockfd = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW); assert(sockfd > 2); get_src_mac(&iface_data, sockfd); fill_packet(packet, dest_mac, iface_data.if_mac.ifr_hwaddr.sa_data, packet_size, payload); dest_address.sll_ifindex = iface_data.index; dest_address.sll_halen = ETH_ALEN; memcpy(dest_address.sll_addr, dest_mac, ETH_ALEN); int result = sendto(sockfd, packet, packet_size, 0, (struct sockaddr*)&dest_address, sizeof(struct sockaddr_ll)); assert(result == packet_size); return 0; }
void wlan_proc(u_char *buf) { /* TODO: Make time function */ /************ Note ******************** * Was getting strange packets, could * * not interpret them correctly. This * * way of parsing (tree parsing?) * * probably isn't the best... Email me* * with suggestions or ideas. Thanks! * *************************************/ if (buf[2]>50) { //printf("Strange! %02x\n",buf[2]); //g_printf("mac:%s\n",get_src_mac(buf)); return; } //printf("Good! %02x\n",buf[2]); /************************************** * Get the input mac, then send it to * * the add_dev function so it can add * * it and perform other processing. * * add_dev returns a pointer to the * * device struct that we can fill. * **************************************/ gchar *input_mac = get_src_mac(buf); device *cdev = add_dev(input_mac); /* Now fill the device struct with * * more information from the packet */ /* Time */ time_t btime; struct tm *time_s; time(&btime); time_s=localtime(&btime); cdev->time=asctime(time_s); cdev->time[24]=0x00; /* Probes (will be specific to packet types) */ //g_scanf(cdev->probes,"none"); cdev->probes[0]=0x00; return; }
void TRexPortAttr::to_json(Json::Value &output) { output["src_mac"] = utl_macaddr_to_str(get_src_mac()); output["promiscuous"]["enabled"] = get_promiscuous(); output["link"]["up"] = is_link_up(); output["speed"] = get_link_speed() / 1000; // make sure we have no cards of less than 1 Gbps output["rx_filter_mode"] = get_rx_filter_mode(); if (get_src_ipv4() != 0) { output["src_ipv4"] = utl_uint32_to_ipv4(get_src_ipv4()); } else { output["src_ipv4"] = Json::nullValue; } int mode; get_flow_ctrl(mode); output["fc"]["mode"] = mode; m_dest.to_json(output["dest"]); }
void TRexPortAttr::update_src_dst_mac(uint8_t *raw_pkt) const { memcpy(raw_pkt, m_dest.get_dest_mac(), 6); memcpy(raw_pkt + 6, get_src_mac(), 6); }