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

时间:2008-12-07 14:32:36

标签: c linux sockets tcp

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

任何帮助都将不胜感激。

-Prabhu

3 个答案:

答案 0 :(得分:10)

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

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

答案 1 :(得分:2)

我相信达隆意味着getsockname()。如果您需要以编程方式确定客户端(侧面调用connect())的端口号,则可以使用此选项。在服务器端(呼叫bind()的一方),您将使用getpeername()从连接的套接字获取相同的信息。

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

答案 2 :(得分:0)

lsof -p <process id> | grep TCP