【发布时间】:2016-12-25 12:36:57
【问题描述】:
我开发了一个 c# 应用程序,使用 TcpClient/TcpListener 来监听本地机器上其他应用程序的请求。现在我需要确定实际连接到我的听众的进程。
有一些示例使用 GetExtendedTcpTable 来查看哪些进程正在使用哪些端口。但是,在与我的听众的每个连接上运行似乎是一项非常昂贵的操作。系统必须知道谁在建立连接,对吗?我只是找不到通过任何对象暴露的信息。有没有 Winsock 大师愿意伸出援手?
【问题讨论】:
-
最坏的情况,你总是可以使用执行
netstat -no并解析结果。 -
也看到了那个。但同样,它似乎会给每个 TCP 连接增加大量开销。毕竟,由于连接发生变化,我无法对其进行缓存。
-
想一想,Fiddler 允许您按进程过滤,因此必须有一种方法以某种有效的方式获取数据,因为 Fiddler 不会导致流量变慢。 ..
-
您可以 PInvoke
GetExtendedTcpTableFunction。这是一个示例code.msdn.microsoft.com/C-Sample-to-list-all-the-4817b58f 您需要稍微调整它以获取 PID,但这就是您想要的 API 调用。 -
这是一个更好的例子,它实际上得到了 PID。 stackoverflow.com/questions/577433/…
标签: c# .net winsock tcpclient tcplistener