TCP 端口访问和 C++
Posted
技术标签:
【中文标题】TCP 端口访问和 C++【英文标题】:TCP port access and C++ 【发布时间】:2012-10-06 06:31:47 【问题描述】:如果一个程序在 Linux 机器上运行,该程序有没有办法扫描允许通过防火墙的端口?例如,如果程序员想要创建一个聊天系统,但程序需要知道哪些端口没有被用户的防火墙拒绝访问传入连接,有没有办法在你的代码中检查这一点?即使防火墙阻止了同一端口的传入连接,程序也可能无法将套接字绑定到端口。有没有办法检查开放的防火墙端口?
旁注:这纯粹是出于教育目的,没有恶意,要明确的是,我正在编写一个聊天系统,并且在测试期间,我无法连接桌面->笔记本电脑,直到我通过允许它手动打开一个端口我的防火墙。这对我来说似乎有点不对劲,不像程序员的代码应该要求用户做的事情。更不用说我不想让少数使用此代码的人处于危险之中(如果让端口永久打开的话)。所以看起来我更适合找到一种方法来利用已经对传入 TCP 连接开放的端口。
旁注:所有客户端都在运行 Fedora
【问题讨论】:
查看UPnP。 选择一个高编号的端口,并以其他方式进行端口会合。防火墙不应该阻止高于 32000 的内容。基于 UDP 的绑定到其他服务使用的公共端口(例如 1900)的方法允许您引导一个可能打开的知名端口,以便为用于的动态端口提供发现TCP。 我认为这不能仅在服务器本身上可靠地完成。如果不使用某种远程代理,服务器就无法通过外围防火墙测试连接。 【参考方案1】:您偶然发现了当今管理新 Internet 应用程序创建的第二大问题。第一个最大的问题当然是 NAT,这是一个密切相关的问题(希望最终会因为 IPv6 而消失)。
而且没有简单的答案。一个好的答案是UPnP,但这不是一个简单的答案,而且绝不是普遍的。我的网络没有运行它。
另一个答案是以某种方式通过 https (或 http 如果必须的话)来隧道化你所做的一切。但对于聊天应用程序来说,这是一个巨大的痛苦。
【讨论】:
以上是关于TCP 端口访问和 C++的主要内容,如果未能解决你的问题,请参考以下文章
端口不可用:listen tcp 0.0.0.0/50070:bind:试图以访问权限禁止的方式访问套接字
Xcode 构建上传错误:对 TCP 端口 443 的出站访问,无法找到包的 MZContentProviderUpload。 (1041)