如何在C#中监视新的IPv4连接

时间:2016-06-09 08:40:10

标签: c# ip pid etw

我需要监控计算机所做的任何新的IPv4连接。我需要的信息是进行连接的进程ID以及进程连接的IP地址。我需要一个回调函数,一旦发现新连接就会调用它。

我曾尝试将ETW与Microsoft-Windows-Kernel-Network一起使用,但我只得到一些daddr和saddr的整数表示,我似乎无法映射回IP地址。任何帮助将不胜感激。

2 个答案:

答案 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的情况下可用。