Страницы

Поиск по вопросам

четверг, 14 марта 2019 г.

TCP мониторинг подключения приложения

Делаю консольное приложение, которое должно проверять подключение к определенному IP и выполнять определенные действия. Как мониторить такое подключение? Тут выводится список всех исходящих, как отфильтровать и оставить только одно?
static void ListAvailableTCPPort(ref ArrayList usedPort) { IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); TcpConnectionInformation[] tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections(); IEnumerator myEnum = tcpConnInfoArray.GetEnumerator();
while (myEnum.MoveNext()) { TcpConnectionInformation TCPInfo = (TcpConnectionInformation)myEnum.Current; Console.WriteLine("{0}", TCPInfo.RemoteEndPoint); usedPort.Add(TCPInfo.LocalEndPoint.Port); } }
public static void Main() { ArrayList usedPorts = new ArrayList(); ListAvailableTCPPort(ref usedPorts); Console.ReadKey(); }


Ответ

Если вам необходимо проверять подключение к определенному IP-адресу,то вы должны фильтровать 1. поле RemoteEndPoint - указывает на IP-адрес и порт TCP-соединения, который вас интересует 2. У подключения должно быть состояние(State)- Established, которое означает что соединение установлено и данные могут быть отправлены.
Вот пример кода:
static void SearchAvailableTCPConnection(ref ArrayList usedPort, string searchAddress, int searchPort) { IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties(); IPEndPoint filterEndpoint = new IPEndPoint(IPAddress.Parse(searchAddress), searchPort);
TcpConnectionInformation tcpConnInfoArray = ipGlobalProperties.GetActiveTcpConnections().Where(g => g.RemoteEndPoint.Equals(filterEndpoint) && g.State ==TcpState.Established).FirstOrDefault(); if (tcpConnInfoArray != null) { Console.WriteLine("Port {0} {1} {2} ", tcpConnInfoArray.LocalEndPoint, tcpConnInfoArray.RemoteEndPoint, tcpConnInfoArray.State); } }
private static void Main(string[] args) { ArrayList usedPorts = new ArrayList(); SearchAvailableTCPConnection(ref usedPorts, "192.168.0.2", 8090); Console.ReadKey(); }
На экран будет выведено сообщение только в том случае, если у нас есть активное TCP-соединение с IP-адресом 192.168.0.2 по порту 8090.
Для конвертации строки IP-адреса в класс IPAddress, используем статическую функцию этого класса Parser

Комментариев нет:

Отправить комментарий