TCP端口访问和C ++

6
如果一个程序正在Linux机器上运行,那么有没有办法让该程序扫描通过防火墙允许的端口?例如,如果程序员想要制作一个聊天系统,但程序需要知道用户防火墙未拒绝入站连接的哪些端口,是否有办法在代码中检查这一点?即使防火墙阻止同一端口的入站连接,程序也不会失败地将套接字绑定到端口。有没有办法检查已打开的防火墙端口?
附注:这纯粹是为了教育目的而写的,没有恶意,明确表示我正在编写一个聊天系统,在测试期间,我无法连接桌面-laptop,直到我手动通过允许它来打开一个端口。这对我来说似乎有些不对劲,并不像程序员的代码应该要求用户做出的事情。更不用说我不想让使用此代码的少数人处于风险之中(如果保持一个端口永久开放会这样做)。因此,似乎我更适合找到一种利用已经对入站TCP连接打开的端口的方法。
附注:所有客户端都在运行fedora。

1
请查看UPnP - Some programmer dude
1
选择一个高端口,并通过其他方式进行端口会合。防火墙不应该阻止32000以上的东西。基于UDP的绑定到其他服务使用的公共端口(例如1900)的方法允许您引导一个众所周知的端口,可能是开放的,以提供用于TCP的动态端口的发现。 - Nicholas Wilson
1
我认为仅仅在服务器上是无法可靠地完成这个任务的。如果不使用某种远程代理,服务器就无法测试通过边界防火墙的连接。 - Barmar
1个回答

4
你发现了如今创建新互联网应用程序的第二大问题。当然,第一大问题是NAT,这是一个与之强相关的问题(希望随着IPv6的普及而最终消失)。
没有简单的答案。一个好的答案是UPnP,但这不是一个简单的答案,而且绝不是普遍适用的。我的网络不支持它。
另一个答案是以某种方式通过https(或http,如果必须)隧道化您所做的所有事情。但对于像聊天应用程序这样的东西来说,这是一个巨大的痛苦。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接