【问题标题】:How do I get PID from socket port on Windows?如何从 Windows 上的套接字端口获取 PID?
【发布时间】:2019-11-06 21:49:55
【问题描述】:

给定一个套接字端口,如何在 Windows 10 上找到使用该端口的进程的进程 ID(进程名称)?我知道netstat 命令,但我只想用C 代码来做。

【问题讨论】:

    标签: c


    【解决方案1】:

    那里怎么样,似乎有一种方法:IP Helper 库。

    参考:https://docs.microsoft.com/en-us/windows/win32/iphlp/ip-helper-start-page

    我没有用它来做这个,但它显然是在正确的道路上,它提供了你需要的一切,基本上是你自己的netstat.exe

    包含所有信息的低级对象是MIB_TCPROW2,它有本地和远程地址+端口,加上dwOwningPid。所以我们知道有办法。

    深入研究,我们最终需要GetTcpTable2() 调用,而微软的网页很有帮助,似乎是功能齐全的 C 代码,可以自己完成所有这些工作。

    https://docs.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-gettcptable2

    发现这是我这一天最大的惊喜!

    【讨论】:

    • 谢谢!请问你是怎么找到这个的?我对你研究的心理过程很感兴趣:)
    • 我在netstat.exe 上使用了反汇编程序 (IDA Pro) 来了解 it 是如何做到的。导入表显示了一些有希望的功能,所以我然后去了必应。我们有了它。
    • 您的操作方法评论比解决方案更有价值,谢谢!但是我遇到了一个新问题,访问GetTcpTable2返回的数组花费了太长时间,所以我打开了另一个问题:stackoverflow.com/questions/58749053/…我想找出每个通过的网络数据包的PID(每秒1000个)。
    猜你喜欢
    • 1970-01-01
    • 2010-10-23
    • 1970-01-01
    • 2015-02-19
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2016-07-14
    • 2012-12-31
    相关资源
    最近更新 更多