Например, чтобы установить сетевой интерфейс на случайный режим, можно использовать setsockopt
в качестве
struct packet_mreq opt;
opt.mr_ifindex = the_very_interface_index;
setsockopt(socket_fd, SOL_PACKET, PACKET_ADD_MEMBERSHIP, (void*)&opt, sizeof(opt));
С другой стороны, в качестве предложенного пакета (7) , одинтакже можно использовать ioctl
с опцией SIOCSIFFLAGS, например
struct ifreq req;
strcpy(req.ifr_name, the_very_interface_name);
ioctl(socket_fd, SIOCGIFFLAGS, &req);
req.ifr_flags |= IFF_PROMISC;
ioctl(socket_fd, SIOCSIFFLAGS, &req);
Я понимаю, что эти два способа полностью эквивалентны, но есть ли разница?Иначе, почему есть два способа сделать то же самое?