1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| struct sockaddr_ll ll;
struct ifreq ifr;
....
....
....
/* Retrieve Network Card identifier */
memset(&ll, 0, sizeof(struct sockaddr_ll));
memset(&ifr, 0, sizeof(struct ifreq));
strncpy(ifr.ifr_name, argv[1], sizeof(ifr.ifr_name));
sockdum = socket(AF_INET, SOCK_DGRAM, 0);
if (sockdum < 0) {
perror("sockdum()");
exit(errno);
}
ret = ioctl(sockdum, SIOCGIFINDEX, &ifr);
printf("index %d <--> %s\n", ifr.ifr_ifindex, ifr.ifr_name);
ll.sll_family = AF_PACKET;
ll.sll_ifindex = ifr.ifr_ifindex;
ll.sll_protocol = htons(ETH_P_ALL);
if (bind(sock, (struct sockaddr *) &ll, sizeof(struct sockaddr_ll)) < 0) {
perror("bind");
exit(errno);
}
printf("binding pf_packet to %s interface.\n", ifr.ifr_name); |
Partager