Windows中是否有命令行工具列出了当前在tcp套接字上设置的所有套接字选项?我正在寻找一个列出进程中所有tcp连接的东西,并为每个连接显示我设置的套接字选项。
我有一个客户端应用程序没有延迟(与服务交谈时),另一个延迟时间为45毫秒 - 所以我认为比较两个应用程序上设置的套接字选项可能会帮助我找出问题所在
我正在使用资源监视器来查看tcp连接的延迟。
答案 0 :(得分:1)
获取属于给定进程的TCP连接列表很容易。 GetTcpTable2()
,GetTcp6Table2()
和GetExtendedTcpTable()
都报告了开放TCP连接的拥有进程ID。
另一方面,获取为给定进程的开放套接字设置的选项并非易事。
没有API专门返回给定进程的套接字句柄列表,因此您必须手动枚举内核句柄,以查找所需进程的开放套接字:
C++ Get Handle of Open Sockets of a Program
然后你必须将自己的代码注入到该进程中,例如CreateRemoteThread()
,并且代码为:
通过WSADuplicateSocket()
复制套接字句柄并将其传递给您的应用,以便它可以使用WSASocket()
来访问它们,例如在其上调用getsockopt()
。
直接查询套接字以获取所需信息,然后将其传回给您的应用。
无论哪种方式,都没有API来检索给定套接字的当前选项列表。您必须一次查询每个选项。