如何允许从本地主机的TCP连接只(How to allow TCP connections from

2019-10-29 04:50发布

我希望能够得到的只有从本地主机(无论是从一个特定端口上的请求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连接,但远程请求也回答

我究竟做错了什么? 有没有其他办法?

谢谢!

Answer 1:

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

做你想做什么的唯一方式是通过建立本地计算机的包过滤(防火墙)拒绝/丢弃的连接请求(SYN包)到特定端口从没有承认自己的IP地址的传入。 在这种情况下,远程主机会认为你的TCP端口关闭或取决于你如何设置过滤器堵塞。

嗯......你也可以接受来自任何接口的任何连接,并立即如果远程主机是不是你自己的IP地址中的一个将其关闭,但由于某些原因,我想这是你真正想要的。



文章来源: How to allow TCP connections from local host only