Разбор буфера с помощью GetExtendedTcpTable() - C#
Формулировка задачи:
Здравствуйте!Из библиотеки IpHlpApi я использую функцию GetExtendedTcpTable и данные помещаю в byte[] buffer. Каким образом вытащить оттуда localIP, remoteIP и PID.Спасибо!
Решение задачи: «Разбор буфера с помощью GetExtendedTcpTable()»
textual
Листинг программы
enum TCP_TABLE_CLASS { TCP_TABLE_BASIC_LISTENER, TCP_TABLE_BASIC_CONNECTIONS, TCP_TABLE_BASIC_ALL, TCP_TABLE_OWNER_PID_LISTENER, TCP_TABLE_OWNER_PID_CONNECTIONS, TCP_TABLE_OWNER_PID_ALL, TCP_TABLE_OWNER_MODULE_LISTENER, TCP_TABLE_OWNER_MODULE_CONNECTIONS, TCP_TABLE_OWNER_MODULE_ALL } private struct MIB_TCPROW_OWNER_PID { private uint dwState; private uint dwLocalAddr; private uint dwLocalPort; private uint dwRemoteAddr; private uint dwRemotePort; private uint dwOwningPid; }; const uint ERROR_INSUFFICIENT_BUFFER = 122; const uint NO_ERROR = 0; private const uint AF_INET = 2; private const uint AF_INET6 = 23; [DllImport( "Iphlpapi.dll", SetLastError = true, ExactSpelling = true )] static extern uint GetExtendedTcpTable ( IntPtr pTcpTable, ref int pdwSize, [MarshalAs( UnmanagedType.Bool )] bool bOrder, uint ulAf, TCP_TABLE_CLASS TableClass, uint Reserved ); static void Main ( string[] args ) { IntPtr ptr = IntPtr.Zero; int buffSize = 0; uint dwError; dwError = GetExtendedTcpTable( ptr, ref buffSize, false, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0 ); if ( dwError != ERROR_INSUFFICIENT_BUFFER ) return; ptr = Marshal.AllocHGlobal( buffSize ); dwError = GetExtendedTcpTable( ptr, ref buffSize, false, AF_INET, TCP_TABLE_CLASS.TCP_TABLE_OWNER_PID_ALL, 0 ); if ( dwError != NO_ERROR ) { Marshal.FreeHGlobal( ptr ); return; } int count = Marshal.ReadInt32( ptr ); IntPtr ptrRead = ptr + sizeof( int ); int sz = Marshal.SizeOf( typeof( MIB_TCPROW_OWNER_PID ) ); var arr = new MIB_TCPROW_OWNER_PID[count]; for ( int i = 0; i < count; i++ ) { arr[i] = (MIB_TCPROW_OWNER_PID)Marshal.PtrToStructure( ptrRead, typeof( MIB_TCPROW_OWNER_PID ) ); ptrRead += sz; } Marshal.FreeHGlobal(ptr); }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д