Почему не удается привязать сокет к интерфейсу?

Я пытаюсь открыть сырой сокет и привязать к нему свой беспроводной интерфейс. Это код, который я использую:

//opening socket
if ((sockfd = socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))) == -1){
//if socket fails give error
perror("socket");
}

//binding socket to interface
if (setsockopt(sockfd, SOL_SOCKET, SO_BINDTODEVICE, "wlp0s19f2u3", 4) < 0)
perror("SIOCGIFHWBIND");

Но при компиляции и запуске с судо Я получаю «SIOCGIFHWBIND: нет такого устройства».

Сначала я подумал, что это потому, что там я пропустил написанное имя интерфейса, но мой вывод iwconfig:

wlp0s19f2u3  IEEE 802.11  Mode:Monitor  Frequency:2.462 GHz  Tx-Power=20 dBm

и это не проблема с режимом монитора, потому что выполнение кода, когда моя беспроводная карта находится в управляемом режиме, выдает тот же вывод, и мне нужно, чтобы интерфейс был в режиме мониторинга.
Пожалуйста, помогите и хорошего дня!

1

Решение

Спасибо Марку Сетчеллу, оказалось, что 4 была из примера кода, где они использовали что-то вроде «eth0», который имеет 4 символа. Так что замена 4 на strlen () вашего интерфейса прекрасно работает. Еще раз спасибо.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]