Netstat 显示程序在不同端口上运行,那么它们应该

Netstat 显示程序在不同端口上运行,那么它们应该

我有一些正在测试的代码。程序 A 侦听预定义的套接字以供程序 B 连接,并且为了进行测试,我正在运行程序 A 和 B 的 32 个实例。我编写了脚本来告诉程序 A 侦听端口 9001-9032 并输入程序 B 的每个实例的配置文件与要连接的相应端口。

当我运行启动程序 A 和 B 的脚本并运行时,netstat -tnap我发现在所有端口 9001-9032 中,实际使用的唯一端口是 9001,它被另一个程序使用(我的错误!)。当我 grep 查找程序 A 时,我发现每个实例都在监听看似完全随机的端口,这些端口与它们应该监听的端口 90** 没有关系。然而,我的程序 B(应该连接到端口 9001-9032)能够找到并连接到程序 A 的每个实例,尽管 A 显然没有监听 B 应该尝试连接的端口。我很困惑这怎么可能。

如果这还不够混乱我的 32 程序和仅有的32 号(侦听 9032)在启动时死亡,并出现错误:当它尝试绑定到端口时,地址被拒绝。我尝试更改程序以侦听端口 15001-15032,只是为了看看会发生什么,但我仍然得到完全相同的行为;所有程序似乎都在随机端口上侦听,并且 32 程序无法建立连接。

谁能解释为什么我的端口表现得如此?我是否误解了 netstat 或 Linux ports 的某些部分?

答案1

我建议使用socat(建立任意字节流的命令行工具)模拟据称断开的连接。

尝试用以下命令监听端口

socat - TCP-Listen:9001

对于侦听端口 9001 的 TCP 连接或

socat - UDP-Listen:9001

用于 udp 连接。

检查是否netstat -p(或sockstat)显示已建立的连接socat。如果是这样,您应该进一步研究您的代码,并可能在以下位置发布与源代码相关的问题:stackoverflow.com

如果是其他情况,请告知我们!

相关内容