为什么绑定套接字到接口失败?

时间:2018-06-03 12:20:40

标签: c++ sockets wifi wireless

我正在尝试打开原始套接字并将无线接口绑定到它。这是我正在使用的代码:

//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");

但是在使用sudo 编译和运行时,我得到了一个“SIOCGIFHWBIND:没有这样的设备”
我首先想到这是因为我错过拼写接口名称,但我的iwconfig输出是:

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

并且它不是监控模式的问题,因为在我的无线网卡处于托管模式时运行代码会提供相同的输出,我需要接口处于监控模式。
请帮忙,祝你有愉快的一天!

1 个答案:

答案 0 :(得分:2)

感谢Mark Setchell,结果显示4是来自示例代码,他们使用了类似“eth0”的东西,它有4个字符。所以用你的界面的strlen()取代4效果很好。再次感谢。