为什么将套接字绑定到接口失败?
Why does binding socket to interface fail?
我正在尝试打开一个原始套接字并将我的无线接口绑定到它。这是我使用的代码:
//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: No such device"。
我首先想到这是因为我错过了接口名称的拼写,但我的 iwconfig 输出是:
wlp0s19f2u3 IEEE 802.11 Mode:Monitor Frequency:2.462 GHz Tx-Power=20 dBm
这不是监控模式的问题,因为 运行 当我的无线网卡处于托管模式时,代码提供相同的输出,我需要接口处于监控模式。
请帮忙,祝你有个愉快的一天!
感谢 Mark Setchell,原来 4 来自示例代码,他们使用了类似 "eth0" 的东西,它有 4 个字符。因此,用接口的 strlen() 替换 4 效果很好。再次感谢。
我正在尝试打开一个原始套接字并将我的无线接口绑定到它。这是我使用的代码:
//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: No such device"。
我首先想到这是因为我错过了接口名称的拼写,但我的 iwconfig 输出是:
wlp0s19f2u3 IEEE 802.11 Mode:Monitor Frequency:2.462 GHz Tx-Power=20 dBm
这不是监控模式的问题,因为 运行 当我的无线网卡处于托管模式时,代码提供相同的输出,我需要接口处于监控模式。
请帮忙,祝你有个愉快的一天!
感谢 Mark Setchell,原来 4 来自示例代码,他们使用了类似 "eth0" 的东西,它有 4 个字符。因此,用接口的 strlen() 替换 4 效果很好。再次感谢。