我正在尝试使用ETW、Microsoft-Windows-TCPIP provider和Microsoft TraceEvent库在一台机器上捕获TCP连接的实时数据。
您可以从中获得的其中一个值是TCB,它是一个数字。
我知道TCB (传输控制块)是什么,但我不知道这个数字是什么意思,我能从清单中找到的最好的结果就是这是一个指针。
我真正想做的是用它来读取实际的TCB,并得到它正在连接的地址。我知道我可以从connect和rundown事件中获得地址,但由于各种原因,我可能并不总是拥有这些地址,并且send事件只包含TCB。
编辑:
我找到了许多允许您读取TCB表https://msdn.microsoft.com/en-us/library/windows/desktop/aa366026(v=vs.85).aspx的API。
但是,我真正想做的是使用从ETW返回的TCB编号,然后调用API并获取TCB信息
附加编辑:
我想使用ETW事件中的进程和线程I来确定进程和线程正在与哪个地址通信。
附加编辑:
当我可以获得具有地址和端口的连接事件时,一切都会正常工作,我可以使用TCB编号将其绑定到后续的发送和断开。我需要一个解决方案的特定情况下,我没有连接事件,只有发送。
发布于 2018-02-21 21:31:59
您说您希望将连接绑定到评论中的特定线程/进程。为此,您可以使用TCB作为引用来获取TCP连接的所有事件。在三次握手之后,您可以在Http堆栈的ConnConnect事件中找到源/目标IP/端口元组。然后,您可以找到侦听端口的进程。
您还可以尝试与web服务器事件(如IIS)相关联,以查找更多信息。
发布于 2018-02-15 21:51:34
值得去看看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操作进行大量处理,这会使它变得相当慢
https://stackoverflow.com/questions/48560990
复制相似问题