如何只允许来自本地主机的TCP连接

How to allow TCP connections from local host only

本文关键字:主机 TCP 连接      更新时间:2023-10-16

我希望能够仅从本地主机(从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,但远程请求也被回答

我做错了什么?还有别的办法吗?

谢谢!

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

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

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