2 #include <sys/socket.h>
4 #include <netpacket/packet.h>
5 #include <net/ethernet.h>
6 #include <netinet/in.h>
18 opendevice(char *dev, int promisc)
22 struct sockaddr_ll sa;
24 if((fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) < 0)
28 memset(&ifr, 0, sizeof ifr);
29 strncpy(ifr.ifr_name, dev, sizeof ifr.ifr_name);
30 if(ioctl(fd, SIOCGIFINDEX, &ifr) < 0){
34 memset(&sa, 0, sizeof sa);
35 sa.sll_family = AF_PACKET;
36 sa.sll_protocol = htons(ETH_P_ALL);
37 sa.sll_ifindex = ifr.ifr_ifindex;
38 if(bind(fd, (struct sockaddr*)&sa, sizeof sa) < 0){
45 memset(&ifr, 0, sizeof ifr);
46 strncpy(ifr.ifr_name, dev, sizeof ifr.ifr_name);
47 if(ioctl(fd, SIOCGIFFLAGS, &ifr) < 0){
51 ifr.ifr_flags |= IFF_PROMISC;
52 if(ioctl(fd, SIOCSIFFLAGS, &ifr) < 0){