【问题标题】:How can I detect what program is listening to a TCP/IP port in Windows?如何检测 Windows 中正在侦听 TCP/IP 端口的程序?
【发布时间】:2014-06-05 22:37:38
【问题描述】:

我继承了一个应用程序,它在端口 7001 上侦听来自我们内部测试设备的 UDP 广播,我最近更新了另一个需要做同样事情的应用程序。两个应用程序必须能够在同一台计算机上共存。

目前,当我最近更新的应用程序尝试绑定到端口以侦听 UDP 广播并失败时,它只是报告该端口不可用并建议继承的应用程序可能正在运行。如何让我的应用程序检测到哪个应用程序实际在该端口上侦听?我已经进行了谷歌搜索,甚至搜索了这个站点,但到目前为止,除了在命令行中使用 Task Manager、TCPView 或 netstat 之外,我找不到任何东西。

我更喜欢使用 Windows API 或 Windows 系统 COM 组件的技术,因为这两个应用程序都是用 Visual Basic 6.0 编写的。 (我知道,我知道,但我必须维护这些应用程序,因为它们是关键任务。)但是,如果我在新的开发工作中需要它,.NET 解决方案也会很有用。

【问题讨论】:

  • GetTcpTable2 可以为您获取进程 ID。类似的问题在这里link
  • 不知道你是否可以使用它,但上面的 MSDN 条目和一些示例代码位于msdn.microsoft.com/en-us/library/windows/desktop/…
  • 您也可以通过 WMI 获取此信息。非常方便的东西。
  • 谢谢,我认为 GetTcpTable2 函数可以帮助我到达需要的地方。只要我有时间编写代码以获得我需要的东西,我就会在这里发布我写的东西。

标签: sockets tcp vb6 ip port


【解决方案1】:

用途:

netstat -n -o

这将显示进程 ID,您可以从那里查看任务管理器的进程查看器,进入菜单 View → *Columns... 并检查进程 ID (PID)。然后你就可以看到监听那个端口的进程的名字了。

当然,您需要一种编程方式来完成此任务,而 GetTCPTable2 API 是最好的,正如已经建议的那样。事实上,如果您查看 netstat.exe 的 IAT(导入地址表),它实际上使用该 API 来获取该信息。

有一种方法可以直接与命令窗口通信并使用管道获取其输出,并且可以正常工作,但理想的方法是简单地使用与 netstat 相同的 API。

【讨论】:

  • 谢谢,这应该可以让我到达我需要的地方。我没有时间对此进行进一步讨论,但是一旦我有一些工作代码,我就会将其发布在这里。
  • 只有netstat --all --program | grep 8090 为我工作。只是分享。网络工具 1.60 网络统计 1.42 (2001-04-15)
猜你喜欢
  • 2012-10-31
  • 1970-01-01
  • 2010-09-08
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 2016-12-30
  • 2010-09-08
相关资源
最近更新 更多