【问题标题】:In Windows, how do I find out which process is on the other end of a local network socket?在 Windows 中,如何找出本地网络套接字另一端的进程?
【发布时间】:2011-10-02 13:36:06
【问题描述】:

也就是说,如果我有一个服务器在127.0.0.1上监听,并且有一个TCP连接进来,如何确定客户端的进程id?

此外,如果没有用于此的 API,我可以从哪里以更骇人听闻的方式提取信息?

(这样做的目的是修改本地 HTTP 代理服务器,以根据请求过程接受或拒绝请求。)

编辑:palacsint 在下面的回答让我找到了this answer to a similar question,这正是我们所需要的

【问题讨论】:

    标签: windows sockets process localhost


    【解决方案1】:
    netstat -a -o
    

    打印出来。我想它们在同一台机器上,因为您正在 127.0.0.1 上收听。

    【讨论】:

    【解决方案2】:

    这样做的唯一方法是连接进程发送某种包含标识符的自定义标头。这是因为网络层与应用层完全分离(提示:OSI MODEL。这样就可以编写较低层的软件而无需关心上面发生的事情,只要交换的消息(阅读:网络数据包) ) 遵循预先确定的格式(阅读:使用相同的协议)。

    【讨论】:

    • 感谢您的回答,但这肯定不是唯一的方法。信息存储在系统的某个地方,因此必须能够以某种方式检索它,即使这确实意味着无视理论上的层分离。
    • 但是你的代理服务器得到的本质上是一些网络数据包,它不关心远程进程是否在windows、linux、solaris等上运行,或者它是否在本地机器上运行。此外,pid 完全不可靠,它们不保存任何信息 - 它们在每次运行时都是随机的,因此您无法对它们进行硬编码或构建由 PIDS 组成的过滤器
    • 这仅适用于本地连接,因此连接到 127.0.0.1 的进程。服务器监听 127.0.0.1,连接进来,服务器以某种方式确定正在连接的进程 ID,然后能够从进程 ID 中查找进程名称、路径等并相应地创建响应。
    猜你喜欢
    • 2010-10-23
    • 2011-10-03
    • 1970-01-01
    • 1970-01-01
    • 2015-03-19
    • 1970-01-01
    • 2021-02-06
    • 2012-10-21
    • 2020-01-08
    相关资源
    最近更新 更多