internal TcpConnectionInformation(MIB_TCPROW row) { this.state = (TcpState)row.dwState; int localPort = (int)(((row.dwLocalPort & 0xff000000) >> 8) | ((row.dwLocalPort & 0xff0000) << 8) | ((row.dwLocalPort & 0xFF00) >> 8) | ((row.dwLocalPort & 0xff) << 8)); //((ushort)Marshal.ReadInt16(bufferPtr, 8 + (i * 8)) >> 8) | (ushort)Marshal.ReadInt16(bufferPtr, 10 + (i * 8)); row.dwLocalPort;// (((row.localPort3 << 0x18) | (row.localPort4 << 0x10)) | (row.localPort1 << 8)) | row.localPort2; int remotePort = (int)((this.state == TcpState.Listen) ? 0 : (int)(((row.dwRemotePort & 0xff000000) >> 8) | ((row.dwRemotePort & 0xff0000) << 8) | ((row.dwRemotePort & 0xFF00) >> 8) | ((row.dwRemotePort & 0xff) << 8))); //((row.dwRemotePort & 0xFFFF0000) >> 16) | ((row.dwRemotePort & 0xffff) << 16));// ((((row.remotePort3 << 0x18) | (row.remotePort4 << 0x10)) | (row.remotePort1 << 8)) | row.remotePort2); this.localEndPoint = new IPEndPoint((long)row.dwLocalAddr, localPort); this.remoteEndPoint = new IPEndPoint((long)row.dwRemoteAddr, remotePort); }
private TcpConnectionInformation[] GetAllTcpConnections() { int bufferLen = 0; IntPtr bufferPtr = IntPtr.Zero; TcpConnectionInformation[] informationArray = null; int result = NativeMethods.GetTcpTable(bufferPtr, ref bufferLen, true); while (result == 0x7a) { try { bufferPtr = Marshal.AllocHGlobal(bufferLen); result = NativeMethods.GetTcpTable(bufferPtr, ref bufferLen, true); if (result == 0) { int numberOfEntries = Marshal.ReadInt32(bufferPtr); if (numberOfEntries > 0) { informationArray = new TcpConnectionInformation[numberOfEntries]; for (int i = 0; i < numberOfEntries; i++) { MIB_TCPROW row = (MIB_TCPROW)Marshal.PtrToStructure(IntPtrInTheHand.Add(bufferPtr, 4 + (i * 20)), typeof(MIB_TCPROW)); informationArray[i] = new TcpConnectionInformation(row); } } } continue; } finally { if (bufferPtr != IntPtr.Zero) { Marshal.FreeHGlobal(bufferPtr); bufferPtr = IntPtr.Zero; } } } if ((result != 0) && (result != 0xe8)) { throw new NetworkInformationException((int)result); } if (informationArray == null) { return(new TcpConnectionInformation[0]); } return(informationArray); }