如何将套接字绑定到特定的网络接口?我尝试setsockopt在服务器端使用,但客户端仍然可以通过eth0和lo接口访问服务.
我可以通过设置特定的IP地址来实现这一点 serv_addr.sin_addr.s_addr.
但我怀疑我们只能使用绑定到接口setsockopt(不提IP地址).
Dav*_*rra 22
您可以通过设置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 ...
}
Run Code Online (Sandbox Code Playgroud)
警告:您必须是root用户CAP_NET_RAW才能使用此选项.
第二种方法是您可以使用getifaddrs()解析绑定到接口的IP地址.
请按照后一个链接获取全面的示例.
你能做到的唯一方法就是你提到的 -
通过使用设置特定的IP地址
serv_addr.sin_addr.s_addr
如果不知道要绑定的地址,您就无法做到这一点。
ioctl如果需要,您可以使用s 来确定当前的 IP 地址,尽管现在可能有一种更聪明的方法来做到这一点 - 我最近在现代 Linux 发行版中没有做太多事情。
| 归档时间: |
|
| 查看次数: |
32216 次 |
| 最近记录: |