Вот мой ответ, насколько мне известно:
1) Да.Вы правильно указали int sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
2) Ваше устройство должно быть в режиме мониторинга для захвата кадров маяка.Если на вашем Linux-компьютере установлен пакет aircrack-ng
, вы можете использовать airmon-ng start [DEV NAME]
, чтобы перевести его в режим монитора или если установлены сетевые инструменты и т. Д., Вы можете сделать следующее (например, в качестве устройства, которое я хочу установить, используется «wlan0»)в режим монитора):
ifconfig wlan0 down
iw wlan0 set type monitor
ip link set wlan0 name wlan0mon && ifconfig wlan0mon up
Далее, если вы хотите продолжить использовать сокет режима монитора в C, вы можете использовать следующее:
struct ifreq ifr;
struct sockaddr_ll ll;
assert(sizeof(ifr.ifr_name) == IFNAMSIZ);
int sock_raw = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));
strncpy(ifr.ifr_name, "wlan0mon", sizeof(ifr._ifr_name));
ioctl(sock_raw, SIOCGIFINDEX, &ifr);
ll.sll_ifindex = ifr.ifr_ifindex;
ll.sll_protocol = htons(ETH_P_ALL);
ll.sll_family = PF_PACKET;
bind(sock_raw, (struct sockaddr *)&ll, sizeof(ll));
Этот код C устанавливает необработанныйРазъем для использования в режиме монитора, затем привязывает его к устройству в режиме монитора.Теперь его можно использовать для отправки / записи кадров 802.11 и т. Д. Надеюсь, это поможет:)