我需要监控计算机所做的任何新的IPv4连接。我需要的信息是进行连接的进程ID以及进程连接的IP地址。我需要一个回调函数,一旦发现新连接就会调用它。
我曾尝试将ETW与Microsoft-Windows-Kernel-Network一起使用,但我只得到一些daddr和saddr的整数表示,我似乎无法映射回IP地址。任何帮助将不胜感激。
答案 0 :(得分:3)
您应该使用Microsoft-Windows-TCPIP
提供商。您可以使用TraceEvent创建实时会话,TraceEvent可以使用KernelSourceParser来解析IP数据
_kernelTraceEventParser = new KernelTraceEventParser(_source);
_kernelTraceEventParser.TcpIpConnect += KernelParserOnTcpIpConnect;
private void KernelParserOnTcpIpConnect(TcpIpConnectTraceData tcpIpConnectTraceData)
{
lokalAddress = tcpIpConnectTraceData.saddr + ":" + tcpIpConnectTraceData.sport;
serverAddress = tcpIpConnectTraceData.daddr + ":" + tcpIpConnectTraceData.dport;
}
因为TcpIpConnectTraceData
是从TraceEvent
类继承的,所以您可以访问ProcessName和ProcessID。
答案 1 :(得分:0)
您正在寻找的功能称为GetTcpTable,C#中的部分实现是available here。后者也会获得该过程,因此它完全满足您的要求。
它似乎在没有互操作as part of newer .NET implementations的情况下可用。