Вот мой ответ на мои знания:
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 и т. Д. Надеюсь, это поможет :)
person
meep
schedule
14.06.2019