我希望只能从localhost(来自127.0.0.1
和my_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,但远程请求也被回答
我做错了什么?还有其他办法吗?
谢谢!
答案 0 :(得分:1)
从您的应用程序中,您只能设置端口绑定的接口。在第一种情况下,您将其绑定到环回接口(lo
,IP地址127.0.0.1
),这意味着只有您可以连接到它,因为只有您自己的主机到达该接口。例如,如果将端口绑定到外部接口eth0
,例如IP地址为10.1.2.3
,则在没有防火墙阻止连接请求的情况下,外部主机可能能够连接到该端口。
执行所需操作的唯一方法是设置本地计算机的数据包筛选器(防火墙),以拒绝/丢弃连接请求(SYN数据包)到从未被识别为您自己的IP地址传入的特定端口。在这种情况下,远程主机会认为您的TCP端口已关闭或被阻止,具体取决于您设置过滤器的方式。
嗯......如果远程主机不是你自己的IP地址,你也可以接受来自任何界面的任何连接,并立即关闭它,但出于某种原因,我猜这就是你真正想要的。