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

时间:2013-06-13 08:27:04

标签: c++ sockets tcp tcpserver

我希望只能从localhost(来自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,但远程请求也被回答

我做错了什么?还有其他办法吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

执行所需操作的唯一方法是设置本地计算机的数据包筛选器(防火墙),以拒绝/丢弃连接请求(SYN数据包)到从未被识别为您自己的IP地址传入的特定端口。在这种情况下,远程主机会认为您的TCP端口已关闭或被阻止,具体取决于您设置过滤器的方式。

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