我创建了一个 TCP 套接字,而不用担心绑定到 [socket.sin_port = 0] 的端口号。但是以后如果我想打印客户端的端口号,我该怎么做?客户端 C 应用程序(在 Linux 上)创建了许多连接到服务器的客户端。为了调试问题,我捕获了 ethereal 上的流量。我想在出现问题时在日志中打印端口号,以便在 ethereal 上进行过滤变得容易。
任何帮助,将不胜感激。
-帕布
连接成功后,使用 getsockname() 调用获取套接字地址和端口。
编辑:正确的方法名称。有时我无法将一个简单的单词从一个窗口复制到另一个窗口!
我相信达伦的意思是getsockname()
。connect()
如果您需要以编程方式确定客户端(调用方)的端口号,这就是您想要的。在服务器端(调用端bind()
),您将使用getpeername()
从连接的套接字获取相同的信息。
但是,如果您正在调试并且无法更改代码,那么您最终会使用 netstat 或 sockstat 实用程序,具体取决于操作系统。我不确定 Linux(甚至您的特定软件包)下有哪些实用程序可用,但我会从man sockstat
. 如果已安装,您可以从任一侧运行它并查看哪些端点已分配给哪些进程。结合这个,grep
你通常可以找出在 Ethereal 中过滤哪个地址。祝你好运!
lsof -p <process id> | grep TCP