Я пытаюсь открыть сырой сокет и привязать к нему свой беспроводной интерфейс. Это код, который я использую:
//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
и это не проблема с режимом монитора, потому что выполнение кода, когда моя беспроводная карта находится в управляемом режиме, выдает тот же вывод, и мне нужно, чтобы интерфейс был в режиме мониторинга.
Пожалуйста, помогите и хорошего дня!
Спасибо Марку Сетчеллу, оказалось, что 4 была из примера кода, где они использовали что-то вроде «eth0», который имеет 4 символа. Так что замена 4 на strlen () вашего интерфейса прекрасно работает. Еще раз спасибо.
Других решений пока нет …