2012-10-16 107 views
5

如果程序在Linux计算机上运行,​​那么该程序是否可以扫描允许通过防火墙的端口?例如,如果程序员想制作一个聊天系统,但程序需要知道哪些端口没有被用户的防火墙拒绝访问传入连接,那么有没有办法在你的代码中检查这一点?即使防火墙阻止了同一端口与传入连接,程序也可能无法将套接字绑定到端口。有没有办法检查开放的防火墙端口?TCP端口访问和C++

旁注:这纯粹是为了教育目的,没有坏意图,要清楚我正在写一个聊天系统,并且在测试期间,我无法连接桌面 - >笔记本电脑,直到通过允许它手动打开一个端口通过我的防火墙。这对我来说似乎有点偏离,而不像程序员的代码应该要求用户那样做。更不用说,我不想让少数使用此代码的人面临风险(如果将端口永久打开,这样做)。所以看起来我更适合寻找一种方式来利用已经对传入TCP连接开放的端口。

sidesidenote:所有客户端运行的Fedora

+1

查看[UPnP](http://en.wikipedia.org/wiki/Universal_Plug_and_Play)。 –

+1

选择一个高编号的端口,并以其他方式进行端口集合。防火墙不应该阻止超过32000的东西。基于UDP的方法用于绑定到其他服务使用的通用端口(例如1900),允许您引导一个众所周知的端口可能是开放的,以便为用于TCP。 –

+1

我不认为这可以在服务器本身上可靠地完成。如果没有使用某种远程代理服务器,服务器就无法通过定界器防火墙测试连接。 – Barmar

回答

4

你无意中发现了执政的新的互联网应用程序的创建今天的第二大问题。当然,第一大问题是NAT,这是一个强烈相关的问题(并且最终由于IPv6而最终消失)。

并没有简单的答案。一个很好的答案是UPnP,但这不是一个简单的答案,绝不是通用的。我的网络不运行它。

另一个答案是以某种方式隧道你通过https(或http,如果你必须)做的一切。但是对于像聊天应用程序这样的事情,这是一个巨大的痛苦