【发布时间】:2016-10-23 16:43:02
【问题描述】:
我正在尝试将套接字绑定到特定的(环回)接口lo,以防止外部流量干扰它:
int bind_socket(uint8_t *iface, uint8_t port) {
int rv;
struct sockaddr_in addr;
rv = socket(AF_INET, SOCK_STREAM, 0);
if (rv < 0) return -1;
if (setsockopt(rv, SOL_SOCKET, SO_BINDTODEVICE, iface, strlen(iface)) < 0) {
return -2;
}
bzero((char *) &addr, sizeof(addr));
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = INADDR_ANY;
addr.sin_port = htons(port);
if (bind(rv, (struct sockaddr *) &addr, sizeof(addr)) < 0)
return -3;
return rv;
}
...
int ss;
ss = bind_socket("lo", 100);
但是,如果我运行nmap localhost -e wlpXsX,我不应该得到指示套接字可通过该接口使用的输出。相反,它被报告为可用;我似乎无法推断出原因。为什么这个接口可以通过一个旨在使其对所有其他接口不可用的程序全局可用?
【问题讨论】:
-
XY 问题?如果你想要一个只用于本地通信的套接字,你为什么要使用 AF_INET 套接字呢?