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

How can I monitor new IPv4 connections in C#

我需要监控计算机建立的任何新 IPv4 连接。我需要的信息是建立连接的进程 ID 以及进程连接到的 IP 地址。我需要一个在发现新连接时立即调用的回调函数。

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

您要找的函数叫做GetTcpTable, partial implementation in C# is available here。后者也获得了过程,完全满足你的要求。

它似乎也可以在没有互操作的情况下使用 as part of newer .NET implementations

您应该使用 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 class 您可以访问 ProcessName 和 ProcessID。