захватить кадры маяка с помощью сокетов Linux c

Я хотел бы захватить кадры Beacon с моего маршрутизатора с помощью сокетов Linux c.

  1. Каковы определения открытия сокета? Это уместно? sock_raw = сокет (PF_PACKET, SOCK_RAW, htons (ETH_P_ALL))

  2. Должен ли он быть в режиме управления или мониторинга?

Большое спасибо

Тали П.С. Я не хочу реализовывать это с помощью сторонних библиотек, таких как libpcap.


person Tali    schedule 24.10.2018    source источник


Ответы (1)


Вот мой ответ на мои знания:

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