int main(int argc, const char *argv[]) { int len, size, tcphdrlen; u8 *pdata, *http; u8 dstmac[ETH_ALEN] = {0}; char recvbuf[BUFSIZE]; struct sockaddr_ll sa; struct ethhdr *ethhdr; struct iphdr *iphdr; struct tcphdr *tcphdr; char *ifname = "wfm"; SOCK: if ((sock_fd = open_socket(ifname)) < 0) { perror("open_socket"); exit(EXIT_FAILURE); } if ((ifindex = interface_index(ifname)) < 0) { perror("interface_index"); exit(EXIT_FAILURE); } if (interface_addr(ifname, dstmac) < 0) { perror("interface_addr"); exit(EXIT_FAILURE); } memset(&sa, 0, sizeof(sa)); sa.sll_family = AF_PACKET; sa.sll_protocol = htons(ETH_P_ALL); sa.sll_ifindex = ifindex; if (bind(sock_fd, (struct sockaddr *)&sa, sizeof(sa)) == -1) exit(EXIT_FAILURE); for ( ; ; ) { len = recvfrom(sock_fd, recvbuf, BUFSIZE, 0, NULL, NULL); if (len < 0) { close(sock_fd); sleep(3); goto SOCK; } /* process packet ... */ print_packet(recvbuf, len); /* process packet ... */ } return 0; }
InstanceKlass* next_interface() { return interface_at(interface_index()); }
bool has_visited_all_interfaces() { return interface_index() >= number_of_interfaces(); }