将套接字绑定到网络接口

2024-02-22

如何将套接字绑定到特定的网络接口?我尝试使用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(使用前将#替换为@)

将套接字绑定到网络接口 的相关文章

随机推荐