5

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

任何帮助,将不胜感激。

-帕布

4

3 回答 3

10

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

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

于 2008-12-07T14:43:34.023 回答
2

我相信达伦的意思是getsockname()connect()如果您需要以编程方式确定客户端(调用方)的端口号,这就是您想要的。在服务器端(调用端bind()),您将使用getpeername()从连接的套接字获取相同的信息。

但是,如果您正在调试并且无法更改代码,那么您最终会使用 netstat 或 sockstat 实用程序,具体取决于操作系统。我不确定 Linux(甚至您的特定软件包)下有哪些实用程序可用,但我会从man sockstat. 如果已安装,您可以从任一侧运行它并查看哪些端点已分配给哪些进程。结合这个,grep你通常可以找出在 Ethereal 中过滤哪个地址。祝你好运!

于 2008-12-07T15:58:22.063 回答
0
lsof -p <process id> | grep TCP
于 2008-12-07T18:35:45.507 回答