c++ - TCP端口访问和C++

标签 c++ sockets networking tcp port

如果一个程序在 Linux 机器上运行,有没有办法让该程序扫描允许通过防火墙的端口?例如,如果一个程序员想要制作一个聊天系统,但程序需要知道哪些端口没有被用户的防火墙拒绝访问传入连接,有没有办法在您的代码中检查这一点?即使防火墙阻止同一端口的传入连接,程序也可能无法将套接字绑定(bind)到端口。有没有办法检查打开的防火墙端口?

旁注:这纯粹是出于教育目的,没有恶意,需要说明的是,我正在编写一个聊天系统,在测试期间,我无法连接台式机->笔记本电脑,直到我通过允许它手动打开一个端口我的防火墙。这对我来说似乎有点不对劲,不像程序员的代码应该要求用户做的事情。更不用说我不想让少数使用此代码的人处于危险之中(如果让端口永久打开的话)。因此,我似乎更适合寻找一种方法来利用已经对传入 TCP 连接开放的端口。

旁注:所有客户端都运行 fedora

最佳答案

您无意中遇到了当今管理新 Internet 应用程序创建的第二大问题。第一个最大的当然是 N​​AT,这是一个密切相关的问题(并希望最终因为 IPv6 而消失)。

而且没有简单的答案。一个好的答案是 UPnP ,但这不是一个简单的答案,也绝不是普遍的。我的网络不运行它。

另一个答案是以某种方式将您所做的一切都通过 https(如果必须的话,也可以通过 http)进行隧道传输。但这对于聊天应用程序之类的东西来说是一个巨大的痛苦。

关于c++ - TCP端口访问和C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12909941/

相关文章:

c++ - 如果需要创建一个 ofstream

sockets - 在执行 SSL_read 或 SSL_write 操作之前使用 SSL_want?

sockets - FTP 服务器如何恢复下载?

java - 在我的 java 应用程序中与 paypal 服务器通信时出现 ssl 握手错误

Linux:环回接口(interface)上的传入数据包

c++ - 预处理/预编译 - 用常量替换变量

c++ - 如何将 dlib shape_pedictor 与视频捕获一起编写

c++11 在信号处理程序中使用条件变量

C# 线程在套接字上接收数据之前退出

networking - 协议(protocol)术语 : Message versus Packet