在Windows中,我如何检测哪个程序在侦听TCP/IP端口?

5

我有一个应用程序,它继承自我们内部测试设备,在端口7001上监听UDP广播,并且最近更新了另一个需要执行相同操作的应用程序。这两个应用程序都必须能够在同一台计算机上共存。

目前,当我最近更新的应用程序尝试绑定到端口以侦听UDP广播并失败时,它只是报告该端口不可用,并建议已经运行遗传的应用程序。如何让我的应用程序检测实际在该端口上侦听哪个应用程序?我已经通过谷歌搜索和本网站搜索,但迄今为止我仍然无法找到任何东西,除了使用任务管理器TCPViewnetstat命令行。

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


GetTcpTable2 可以获取进程 ID。类似的问题在这里 链接 - user2773289
不知道你是否可以使用,但上述的MSDN条目附带一些示例代码,网址为http://msdn.microsoft.com/en-us/library/windows/desktop/bb408406(v=vs.85).aspx。 - Michael McGarrah
你也可以通过 WMI 获取这些信息。非常方便的工具。 - user207421
谢谢,我想GetTcpTable2函数会帮我达到我需要的目的。只要我有时间编写获取所需内容的代码,我就会在这里发布我编写的代码。 - Gary Neal
1个回答

2

使用:

netstat -n -o

这将显示进程 ID,然后您可以在任务管理器的进程查看器中查看,转到菜单 视图列... 并检查进程 ID(PID),然后您就可以看到监听该端口的进程名称。

当然,您希望以编程方式实现此目标,GetTCPTable2 API 是最好的选择,如已建议。实际上,如果您查看 netstat.exe 的 IAT(导入地址表),它实际上使用该 API 获取该信息。

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


谢谢,这应该能帮我到达我需要的地方。我还没有时间进一步处理这个问题,但是一旦我有一些可用的代码,我会在这里发布它。 - Gary Neal
只有 netstat --all --program | grep 8090 对我有效。仅供参考。net-tools 1.60 netstat 1.42 (2001-04-15) - Felipe Alvarez

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接