0

我希望能够仅从本地主机(来自127.0.0.1my_local_ip)获取特定端口上的请求;

我尝试了以下方法:

int localhost = (127 << 24) + 1; // 127.0.0.1     
sock_address.sin_addr.s_addr = htonl(localhost);    

这让我只能连接127.0.0.1而不是来自实际的本地 ip。我也试过:

char hostName[128] = "";
struct hostent     *pHost        = 0;
gethostname(hostName, sizeof(hostName));
pHost = gethostbyname(hostName);
memcpy(&sock_address.sin_addr, pHost->h_addr_list[0], pHost->h_length);

由于我无法连接127.0.0.1,我能够连接到本地 ip,但远程请求也得到了答复

我究竟做错了什么?还有其他方法吗?

谢谢!

4

1 回答 1

1

在您的应用程序中,您只能设置端口将绑定到哪些接口。在第一种情况下,您将其绑定到环回接口(lo, IP 地址127.0.0.1),这意味着只有您可以连接到它,因为只有您自己的主机才能到达该接口。如果您将端口绑定到外部接口,例如eth0使用 IP 地址10.1.2.3,如果没有防火墙阻止连接请求,外部主机可能能够连接到该端口。

做你想做的事情的唯一方法是设置本地机器的数据包过滤器(防火墙),以拒绝/丢弃从不被识别为你自己的 IP 地址的特定端口的连接请求(SYN 数据包)。在这种情况下,远程主机会认为您的 TCP 端口已关闭或阻塞,具体取决于您设置过滤器的方式。

好吧...如果远程主机不是您自己的 IP 地址之一,您也可以接受来自任何接口的任何连接并立即关闭它,但出于某种原因,我想这就是您真正想要的。

于 2013-06-13T11:07:13.293 回答