Страницы

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

четверг, 23 января 2020 г.

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

#c_sharp #console


Делаю консольное приложение, которое должно проверять подключение к определенному
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();
    }     

    


Ответы

Ответ 1



Если вам необходимо проверять подключение к определенному 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.

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

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