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

时间:2018-02-01 10:52:21

标签: c# etw

我正在尝试使用ETW和Microsoft-Windows-TCPIP提供程序以及Microsoft TraceEvent库在计算机上捕获TCP连接上的实时数据。

您可以从中获得的一个值是TCB,它是一个数字。

我知道TCB是什么(传输控制块),但我不知道这个数字意味着什么,我能从清单中找到的最好的是这是一个指针。

我真正想做的是使用它来读取实际的TCB并获取它所连接的地址。我知道我可以从连接和断开事件中获取一个地址,但由于各种原因,我可能并不总是有这些,发送事件只包含TCB。

编辑:

我找到了许多允许您阅读TCB表的API https://msdn.microsoft.com/en-us/library/windows/desktop/aa366026(v=vs.85).aspx

然而,我真正想做的是使用从ETW返回的TCB编号,然后调用API并获取TCB信息

其他编辑:

我想在ETW事件中使用进程和线程ID来确定进程和线程正在进行通信的地址。

其他编辑:

当我可以获得具有收件人和端口的连接事件时,一切正常,我可以使用TCB编号将其连接到后续发送和断开连接。我需要针对特定​​情况的解决方案,我没有连接事件,只有发送。

2 个答案:

答案 0 :(得分:1)

您说您希望将连接绑定到注释中的特定线程/进程。为此,您可以使用TCB作为参考来获取TCP连接的所有事件。在3次握手之后,您可以在Http堆栈的ConnConnect事件中找到源/目标IP /端口元组。然后,您可以找到侦听端口的进程。

您还可以尝试与Web服务器事件(例如IIS)关联以查找更多信息。

答案 1 :(得分:0)

值得一看how perfview gets the ETW Manifest converted into .net objects。这至少应该让您了解所有可用的对象。您会看到有很多与TCB相关的数字,所以这可能会帮助您找出您想要的数字。

另一件值得尝试的事情是使用Microsoft Message Analyzer捕获网络跟踪。这里的分析器非常棒,您可以将各种TCB值视为不同对象的值。

我从未在Message Analyzer中进行过追踪(仍然在学习)但这对我来说是一个非常方便的捕获方法。您可以在Microsoft Message Analyzer中打开生成的文件:

netsh trace start capture=yes provider=Microsoft-Windows-TCPIP level=0x05 tracefile=TCPIP.etl

注意:尝试尽可能缩短捕获时间,因为Message Analyzer似乎需要为每个GUI操作执行大量处理,这使得它非常慢