【问题标题】:Determining the TCP port number to which client got bound确定客户端绑定的 TCP 端口号
【发布时间】:2010-09-25 17:55:51
【问题描述】:

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

任何帮助将不胜感激。

-帕布

【问题讨论】:

    标签: c linux sockets tcp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:
        lsof -p <process id> | grep TCP
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-03
          • 2012-07-24
          • 1970-01-01
          • 1970-01-01
          • 2013-05-19
          • 2015-11-19
          相关资源
          最近更新 更多