2016-06-09 6 views
0

Мне нужно отслеживать любое новое подключение IPv4, сделанное компьютером. Необходимая информация - это идентификатор процесса, делающий соединение, а также IP-адрес, к которому подключается процесс. Мне понадобится функция обратного вызова, которая будет вызвана, как только будет обнаружено новое соединение.Как контролировать новые подключения IPv4 в C#

Я попытался использовать ETW с Microsoft-Windows-Kernel-Network, но я получаю целочисленные представления некоторых daddr и saddr, которые, похоже, не могут отображаться на IP-адрес. Любая помощь будет оценена по достоинству.

+0

Вы немного поиграли с TraceEvent и поставщиком Microsoft-Windows-TCPIP? Это работает? – magicandre1981

ответ

1

Вы должны использовать провайдера 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.

0

Функция, которую вы ищете, называется GetTcpTable, частичная реализация в C# - available here. Последний также получает этот процесс, чтобы он полностью отвечал вашим требованиям.

Он также доступен без вмешательства оператора as part of newer .NET implementations.