Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
已关闭6年。
Improve this question
Windows中是否有命令行工具列出了TCP套接字上当前设置的所有套接字选项?我正在寻找列出进程中所有tcp连接的内容,并且每个连接都会显示设置的套接字选项。
我有一个客户端应用程序(与服务进行通话时)的延迟为零,而另一个客户端应用程序的延迟为45ms-因此,我认为对两个应用程序上设置的套接字选项进行比较可能有助于我找出问题所在。
我正在使用资源监视器来查看tcp连接的延迟。 通过 直接向套接字查询所需的信息,然后将其传递回您的应用程序。
无论哪种方式,都没有API可以检索给定套接字的当前选项列表。您必须一次查询每个单独的选项。
想要改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。
已关闭6年。
Improve this question
Windows中是否有命令行工具列出了TCP套接字上当前设置的所有套接字选项?我正在寻找列出进程中所有tcp连接的内容,并且每个连接都会显示设置的套接字选项。
我有一个客户端应用程序(与服务进行通话时)的延迟为零,而另一个客户端应用程序的延迟为45ms-因此,我认为对两个应用程序上设置的套接字选项进行比较可能有助于我找出问题所在。
我正在使用资源监视器来查看tcp连接的延迟。
最佳答案
获取属于给定进程的TCP连接列表很容易。 GetTcpTable2()
, GetTcp6Table2()
和 GetExtendedTcpTable()
都报告开放TCP连接的拥有进程ID。
另一方面,获取为给定进程的开放套接字设置的选项并非易事。
没有API专门返回给定进程的套接字句柄列表,因此您必须手动枚举内核句柄以查找所需进程的开放套接字:
C++ Get Handle of Open Sockets of a Program
socket handles
然后,您必须将自己的代码(例如 CreateRemoteThread()
)注入(inject)该过程中,并具有以下任一代码:
WSADuplicateSocket()
复制套接字句柄并将它们传递给您的应用程序,以便它可以使用 WSASocket()
访问它们,例如在它们上调用 getsockopt()
。 无论哪种方式,都没有API可以检索给定套接字的当前选项列表。您必须一次查询每个单独的选项。
关于sockets - 命令行工具列出当前设置的套接字选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27673216/