Перечисление открытых сетевых портов - C#

Узнай цену своей работы

Формулировка задачи:

приветствую, нужна помощь знающих людей. есть задача, а именно нужно написать в форме программу, с использованием winAPI которая будет показывать открытые сетевые порты, сколько времени открыт порт, информацию (путь, версии, имя (это основное)...). сам никогда с winAPI не работал, вообще не знаю что да как. если мой вопрос носит исчерпывающий характер, то прошу скинуть ссылку где есть подобная проблема. может у кого есть какие-нибудь наработки что поможет мне в изучении текущей задачи. в любом случае спасибо! на данный момент курирую MSDN и google, но продвижений нет(

Решение задачи: «Перечисление открытых сетевых портов»

textual
Листинг программы
        [DllImport( "Ws2_32.dll", SetLastError = true, CharSet = CharSet.Ansi )]
        static extern string inet_ntoa (
            [In] IN_ADDR in_addr
            );
 
        [DllImport( "ntdll.dll", SetLastError = true, CharSet = CharSet.Unicode )]
        unsafe private static extern IntPtr RtlIpv4AddressToString (
            uint* Addr,
            StringBuilder S
            );
 
        unsafe static void Main ( string[] args )
        {
            MIB_TCPROW2[] tcpRows;
            IN_ADDR in_addr0 = new IN_ADDR(), in_addr1 = new IN_ADDR();
 
            do
            {
                tcpRows = GetTcpRows();
                Console.Clear();
                Console.WriteLine( "Process\t\tPID\tProtocol\tLocal Address\tLocal Port\tRemote Address\tRemote Port\tState\tOffload State" );
                for ( int i = tcpRows.Length - 1; i >= 0; i-- )
                {
                    //if ( Process.GetProcessById( (int)tcpRows[i].dwOwningPid ).ProcessName == "uTorrent" )
                    //{
                    //// RtlIpv4AddressToString
                    //StringBuilder addr0 = new StringBuilder( 16 ),
                    //              addr1 = new StringBuilder( 16 );
                    //var addr = tcpRows[i].dwLocalAddr;
                    //RtlIpv4AddressToString( &addr, addr0 );
                    //addr = tcpRows[i].dwRemoteAddr;
                    //RtlIpv4AddressToString( &addr, addr1 );
 
                    in_addr0.S_addr = tcpRows[i].dwLocalAddr;
                    in_addr1.S_addr = tcpRows[i].dwRemoteAddr;
 
                    Console.WriteLine( string.Format( "{0}\t{1}\t{2}\t\t{3}\t{4}\t\t{5}\t{6}\t{7}\t{8}",
                        Process.GetProcessById( (int)tcpRows[i].dwOwningPid ).ProcessName,
                        tcpRows[i].dwOwningPid,
                        "TCP",
                        //addr0,
                        string.Format( "{0}.{1}.{2}.{3}", in_addr0.S_un_b.s_b1, in_addr0.S_un_b.s_b2, in_addr0.S_un_b.s_b3, in_addr0.S_un_b.s_b4 ),
                        ntohs( (ushort)tcpRows[i].dwLocalPort ),
                        //addr1,
                        string.Format( "{0}.{1}.{2}.{3}", in_addr1.S_un_b.s_b1, in_addr1.S_un_b.s_b2, in_addr1.S_un_b.s_b3, in_addr1.S_un_b.s_b4 ),
                        ntohs( (ushort)tcpRows[i].dwRemotePort ),
                        tcpRows[i].dwState,
                        tcpRows[i].dwOffloadState )
                        );
                    //}
                }
            } while ( Console.ReadLine() != "end" );
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы