![在程序中使用本地主机 TCP/IP 通信 - 总是安全吗?](https://linux22.com/image/1270192/%E5%9C%A8%E7%A8%8B%E5%BA%8F%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%9C%AC%E5%9C%B0%E4%B8%BB%E6%9C%BA%20TCP%2FIP%20%E9%80%9A%E4%BF%A1%20-%20%E6%80%BB%E6%98%AF%E5%AE%89%E5%85%A8%E5%90%97%EF%BC%9F.png)
我有一个应用程序,它分为几个部分(进程),通过 TCP/IP 进行通信,使用本地主机上预定义的端口。
这总是安全的吗?某种防火墙(企业防火墙、本地安装的防火墙、Windows 防火墙等)可以阻止这种流量吗?或者操作系统中的某些用户设置可以阻止这种流量吗?
我感兴趣的操作系统是 Windows(XP 到 7)和 Linux(Ubuntu、Red Hat Linux 和 SUSE)。
答案1
往返流量由 TCP/IP 堆栈内部
127.0.0.0/8
处理::1/128
。它不会到达物理网卡,也不会离开计算机,因此无法被企业防火墙阻止。由于环回套接字对于 IPC 来说非常常见,因此良好的防火墙绝不会阻止它。(Windows 防火墙不会。)但是,有些人过于偏执……在这种情况下,我会责怪防火墙,而不是您的软件。
在 Unix 上,可能会 (意外) 关闭环回接口 (通常
lo
)。同样,这种情况非常不常见。socketpair()
在适用的情况下,应使用硬编码端口,而不是硬编码端口,以避免端口冲突。更好的方法是在 Linux 上使用 Unix 套接字,在 Windows 上使用命名管道。
答案2
所有这些操作系统都支持运行防火墙软件。这些软件可能会阻止本地主机连接,尽管这种情况并不常见(以我的经验来看)。
有很多应用程序/服务可以做到这一点。只需尝试netstat -an
在您的机器上运行:您很可能会看到很多应用程序打开了监听套接字127.0.0.1
。
我不知道哪些用户设置会阻止它在 Linux 上运行。不知道 Windows 是否也是如此。但同样,这是一种常见的技术。