如何将套接字绑定到特定的网络接口?我尝试使用setsockopt
在服务器端,但客户端仍然可以通过 eth0 和 lo 接口访问服务。
我可以通过使用设置特定的IP地址来实现这一点serv_addr.sin_addr.s_addr
.
但我怀疑我们可以仅使用绑定到接口setsockopt
(不提及 IP 地址)。
您可以通过设置绑定到特定接口SO_BINDTODEVICE
套接字选项。
struct ifreq ifr;
memset(&ifr, 0, sizeof(ifr));
snprintf(ifr.ifr_name, sizeof(ifr.ifr_name), "eth0");
if (setsockopt(s, SOL_SOCKET, SO_BINDTODEVICE, (void *)&ifr, sizeof(ifr)) < 0) {
... error handling ...
}
Warning: 你必须是 root 或拥有CAP_NET_RAW
能力才能使用此选项。
第二种方法是您可以解析与接口绑定的 IP 地址getifaddrs() http://www.linuxhowtos.org/manpages/3/getifaddrs.htm.
请点击后一个链接以获取综合示例。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)