如何在 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。
我需要监控计算机建立的任何新 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。