我试图使用ETW和Microsoft-Windows-TCPIP提供程序和Microsoft TraceEvent库捕获计算机上TCP连接的实时数据.
您可以从中获得的值之一是TCB,它是一个数字.
我知道什么是TCB(传输控制块),但我不知道数字意味着什么,我能从清单中找到的最好的是这是一个指针.
我真正想要做的是使用它来读取实际的TCB并获取它所连接的地址.我知道我可以从连接和断开事件中获取一个地址,但由于各种原因,我可能并不总是有这些,并且发送事件只包含TCB.
编辑:
我找到了许多API,允许您阅读TCB表 https://msdn.microsoft.com/en-us/library/windows/desktop/aa366026(v=vs.85).aspx
然而,我真正想做的是使用从ETW返回的TCB编号,然后调用API并获取TCB信息
附加编辑:
我想在ETW事件中使用进程和线程ID来确定进程和线程正在进行通信的地址.
附加编辑:
当我可以获得具有收件人和端口的连接事件时,一切正常,我可以使用TCB编号将其连接到后续发送和断开连接.我需要针对特定情况的解决方案,其中我没有连接事件,只有发送.
小智 0
值得检查一下perfview 如何将 ETW Manifest 转换为 .net 对象。这至少应该让您了解所有可用的对象。您会看到有很多与 TCB 相关的数字,因此这可能会帮助您找出您想要的数字。
另一件值得尝试的事情是使用 Microsoft Message Analyzer 捕获网络跟踪。这里的分析器很棒,您将看到各种 TCB 值作为不同对象的值。
我从未在消息分析器中进行过跟踪(仍在学习),但这对我来说是一种非常方便的捕获方法。您可以在 Microsoft Message Analyzer 中打开生成的文件:
netsh trace start capture=yes provider=Microsoft-Windows-TCPIP level=0x05 tracefile=TCPIP.etl
Run Code Online (Sandbox Code Playgroud)
注意:尝试使捕获尽可能短,因为消息分析器似乎需要对每个 GUI 操作进行大量处理,这使得它非常慢