如何使用ETW Microsoft-Windows-TCPIP提供程序中的TCB值来获取TCB信息

Man*_*101 8 c# etw

我试图使用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 操作进行大量处理,这使得它非常慢