确定客户端绑定的TCP端口号

5
我创建了一个TCP套接字,不需要关注要绑定的端口号[socket.sin_port = 0]。但是,如果我想打印客户端的端口号,我该怎么做?客户端C应用程序(在Linux上)创建了许多客户端,这些客户端连接到服务器。为了调试问题,我在ethereal上捕获流量。我考虑在问题出现时将端口号打印在日志中,以便在ethereal上进行过滤变得容易。

任何帮助都将不胜感激。

-Prabhu

3个回答

10

在成功连接后,使用getsockname()调用获取套接字地址和端口。

编辑:更正方法名称。有时我无法从一个窗口复制一个简单的单词到另一个窗口!


2
我认为 Darron 的意思是 getsockname()。如果需要在客户端程序中以编程方式确定端口号,则应使用此选项。在服务器端(调用bind()的一方),您将使用getpeername()从连接的套接字获取相同的信息。
但是,如果您正在调试且无法更改代码,则最终将使用诸如netstat或sockstat实用程序,具体取决于操作系统。我不确定Linux下有哪些实用程序(甚至是您的特定软件包),但我会从man sockstat开始。如果安装了该实用程序,则可以从任一侧运行它,并查看已分配给哪些进程的端点。与grep结合使用,您通常可以弄清楚在Ethereal中过滤哪个地址。祝你好运!

0
lsof -p <process id> | grep TCP

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