如果一个程序在 Linux 机器上运行,有没有办法让该程序扫描允许通过防火墙的端口?例如,如果一个程序员想要制作一个聊天系统,但程序需要知道哪些端口没有被用户的防火墙拒绝访问传入连接,有没有办法在您的代码中检查这一点?即使防火墙阻止同一端口的传入连接,程序也可能无法将套接字绑定(bind)到端口。有没有办法检查打开的防火墙端口?
旁注:这纯粹是出于教育目的,没有恶意,需要说明的是,我正在编写一个聊天系统,在测试期间,我无法连接台式机->笔记本电脑,直到我通过允许它手动打开一个端口我的防火墙。这对我来说似乎有点不对劲,不像程序员的代码应该要求用户做的事情。更不用说我不想让少数使用此代码的人处于危险之中(如果让端口永久打开的话)。因此,我似乎更适合寻找一种方法来利用已经对传入 TCP 连接开放的端口。
旁注:所有客户端都运行 fedora
最佳答案
您无意中遇到了当今管理新 Internet 应用程序创建的第二大问题。第一个最大的当然是 NAT,这是一个密切相关的问题(并希望最终因为 IPv6 而消失)。
而且没有简单的答案。一个好的答案是 UPnP ,但这不是一个简单的答案,也绝不是普遍的。我的网络不运行它。
另一个答案是以某种方式将您所做的一切都通过 https(如果必须的话,也可以通过 http)进行隧道传输。但这对于聊天应用程序之类的东西来说是一个巨大的痛苦。
关于c++ - TCP端口访问和C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909941/