Esempio n. 1
0
        public static MIB_TCPTABLE GetTcpTableInfo()
        {
            IntPtr            hTcpTableData = IntPtr.Zero;
            int               iBufferSize   = 0;
            MIB_TCPTABLE      tcpTable      = new MIB_TCPTABLE();
            List <MIB_TCPROW> lstTcpRows    = new List <MIB_TCPROW>();

            GetTcpTable(hTcpTableData, ref iBufferSize, false);
            hTcpTableData = Marshal.AllocHGlobal(iBufferSize);
            int iTcpRowLen      = Marshal.SizeOf(typeof(MIB_TCPROW));
            int aryTcpRowLength = (int)Math.Ceiling((double)(iBufferSize - sizeof(int)) / iTcpRowLen);

            GetTcpTable(hTcpTableData, ref iBufferSize, false);
            for (int i = 0; i < aryTcpRowLength; i++)
            {
                IntPtr     hTempTableRow = new IntPtr(hTcpTableData.ToInt64() + 4 + i * iTcpRowLen);
                MIB_TCPROW tcpRow        = new MIB_TCPROW();
                tcpRow.dwLocalAddr  = 0;
                tcpRow.dwLocalPort  = 0;
                tcpRow.dwRemoteAddr = 0;
                tcpRow.dwRemotePort = 0;
                tcpRow.dwState      = 0;


                Marshal.PtrToStructure(hTempTableRow, tcpRow);
                lstTcpRows.Add(tcpRow);
            }
            tcpTable.dwNumEntries = lstTcpRows.Count;
            tcpTable.table        = new MIB_TCPROW[lstTcpRows.Count];
            lstTcpRows.CopyTo(tcpTable.table);
            return(tcpTable);
        }
Esempio n. 2
0
        internal void GetTcpTable()
        {
            byte[] buffer  = new byte[20000];
            int    pdwSize = 20000;
            int    res     = GetTcpTable(buffer, out pdwSize, true);

            if (res != NO_ERROR)
            {
                buffer = new byte[pdwSize];
                res    = GetTcpTable(buffer, out pdwSize, true);
                if (res != 0)
                {
                    throw new InvalidOperationException("Error get tcp table");
                }
            }

            MIB_TCPTABLE tcpTable = new MIB_TCPTABLE();
            int          nOffset  = 0;

            tcpTable.dwNumEntries = Convert.ToInt32(buffer[nOffset]);
            nOffset       += 4;
            tcpTable.table = new MIB_TCPROW[tcpTable.dwNumEntries];

            for (int i = 0; i < tcpTable.dwNumEntries; i++)
            {
                int st = Convert.ToInt32(buffer[nOffset]);
                tcpTable.table[i].StrgState = ConvertState(st);
                tcpTable.table[i].iState    = st;
                nOffset += 4;
                string LocalAdrr = buffer[nOffset].ToString() + "." + buffer[nOffset + 1].ToString() + "." + buffer[nOffset + 2].ToString() + "." + buffer[nOffset + 3].ToString();
                nOffset += 4;
                int LocalPort = (((int)buffer[nOffset]) << 8) + (((int)buffer[nOffset + 1])) +
                                (((int)buffer[nOffset + 2]) << 24) + (((int)buffer[nOffset + 3]) << 16);

                nOffset += 4;
                tcpTable.table[i].Local = new IPEndPoint(IPAddress.Parse(LocalAdrr), LocalPort);
                string RemoteAdrr = buffer[nOffset].ToString() + "." + buffer[nOffset + 1].ToString() + "." + buffer[nOffset + 2].ToString() + "." + buffer[nOffset + 3].ToString();
                nOffset += 4;
                int RemotePort;
                if (RemoteAdrr == "0.0.0.0")
                {
                    RemotePort = 0;
                }
                else
                {
                    RemotePort = (((int)buffer[nOffset]) << 8) + (((int)buffer[nOffset + 1])) +
                                 (((int)buffer[nOffset + 2]) << 24) + (((int)buffer[nOffset + 3]) << 16);
                }
                nOffset += 4;
                tcpTable.table[i].Remote = new IPEndPoint(IPAddress.Parse(RemoteAdrr), RemotePort);
            }
        }
Esempio n. 3
0
        public static MIB_TCPTABLE GetTable(byte[] buffer)
        {
            var TcpConnetion = new MIB_TCPTABLE();

            int nOffset = 0;

            // number of entry in the
            TcpConnetion.dwNumEntries = Convert.ToInt32(buffer[nOffset]);
            nOffset           += 4;
            TcpConnetion.table = new MIB_TCPROW[TcpConnetion.dwNumEntries];

            for (int i = 0; i < TcpConnetion.dwNumEntries; i++)
            {
                int st = Convert.ToInt32(buffer[nOffset]);
                TcpConnetion.table[i].StrgState = st.ToString();
                TcpConnetion.table[i].iState    = st;
                nOffset += 4;
                string LocalAdrr = buffer[nOffset].ToString() + "." + buffer[nOffset + 1].ToString() + "." +
                                   buffer[nOffset + 2].ToString() + "." + buffer[nOffset + 3].ToString();
                nOffset += 4;
                int LocalPort = ((buffer[nOffset]) << 8) + ((buffer[nOffset + 1]));
                nOffset += 4;
                TcpConnetion.table[i].Local = new IPEndPoint(IPAddress.Parse(LocalAdrr), LocalPort);

                string RemoteAdrr = buffer[nOffset].ToString() + "." + buffer[nOffset + 1].ToString() + "." +
                                    buffer[nOffset + 2].ToString() + "." + buffer[nOffset + 3].ToString();
                nOffset += 4;
                int RemotePort;
                if (RemoteAdrr == "0.0.0.0")
                {
                    RemotePort = 0;
                }
                else
                {
                    RemotePort = ((buffer[nOffset]) << 8) + ((buffer[nOffset + 1]));
                }
                nOffset += 4;
                TcpConnetion.table[i].Remote = new IPEndPoint(IPAddress.Parse(RemoteAdrr),
                                                              RemotePort);
            }
            return(TcpConnetion);
        }
Esempio n. 4
0
        public static bool TestConnection(string connectionString, out string ipAddress)
        {
            ipAddress = null;

            using (var c = new SqlConnection(connectionString))
            {
                try
                {
                    c.Open();
                    if (c.State == ConnectionState.Open)
                    {
                        var server = c.DataSource;
                        var nis    = NetworkInterface.GetAllNetworkInterfaces();
                        var check  = false;
                        foreach (var ni in nis)
                        {
                            if (ni.OperationalStatus != OperationalStatus.Up)
                            {
                                continue;
                            }
                            if (ni.GetIPProperties().GatewayAddresses.Count > 0 &&
                                ni.GetIPProperties().GatewayAddresses.Count(x => x.Address.AddressFamily == AddressFamily.InterNetwork) > 0 &&
                                ni.GetIPProperties().UnicastAddresses.Count > 0 &&
                                ni.GetIPProperties().UnicastAddresses.Count(x => x.Address.AddressFamily == AddressFamily.InterNetwork && !IPAddress.IsLoopback(x.Address) &&
                                                                            (x.IPv4Mask.Address & x.Address.Address) == (ni.GetIPProperties().GatewayAddresses.Where(z => z.Address.AddressFamily == AddressFamily.InterNetwork).First().Address.Address & x.IPv4Mask.Address)) == 1)
                            {
                                if (ipAddress == null)
                                {
                                    ipAddress = ni.GetIPProperties().UnicastAddresses.Where(x => x.Address.AddressFamily == AddressFamily.InterNetwork && !IPAddress.IsLoopback(x.Address) &&
                                                                                            (x.IPv4Mask.Address & x.Address.Address) == (ni.GetIPProperties().GatewayAddresses.Where(z => z.Address.AddressFamily == AddressFamily.InterNetwork).First().Address.Address & x.IPv4Mask.Address)).First().Address.ToString();
                                }
                                else
                                {
                                    check = true;
                                    break;
                                }
                            }
                        }
                        if (!check)
                        {
                            return(!string.IsNullOrEmpty(ipAddress));
                        }

                        int pdwSize;
                        Console.WriteLine("{0}: GetTcpTable size start", DateTime.Now.ToString("HH:mm:ss fff"));
                        int res = GetTcpTable(null, out pdwSize, true);
                        Console.WriteLine("{0}: GetTcpTable size end. Size {1}", DateTime.Now.ToString("HH:mm:ss fff"), pdwSize);
                        if (res != 0)
                        {
                            pdwSize = (int)(pdwSize * 1.3);
                            var buffer = new byte[pdwSize];
                            res = GetTcpTable(buffer, out pdwSize, true);
                            if (res == 0)
                            {
                                Console.WriteLine("{0}: GetTcpTable start", DateTime.Now.ToString("HH:mm:ss fff"));
                                MIB_TCPTABLE tab = GetTable(buffer);
                                IPHostEntry  iph = Dns.GetHostEntry(server);
                                for (int i = 0; i < tab.dwNumEntries; i++)
                                {
                                    if (tab.table[i].iState == MIB_TCP_STATE_ESTAB &&
                                        tab.table[i].Local.Address.AddressFamily == AddressFamily.InterNetwork &&
                                        tab.table[i].Remote.Port == 1433)
                                    {
                                        //Console.WriteLine("{0}: GetHostEntry start. Ip = {1}", DateTime.Now.ToString("HH:mm:ss fff"), tab.table[i].Remote.Address);
                                        //IPHostEntry iph = Dns.GetHostEntry(tab.table[i].Remote.Address);
                                        //Console.WriteLine("{0}: GetHostEntry end.", DateTime.Now.ToString("HH:mm:ss fff"));
                                        //Match m = Regex.Match(iph.HostName, "^" + server + "(.[0-9a-z]|$)", RegexOptions.IgnoreCase);
                                        //if (m.Success)
                                        //{
                                        if (iph.AddressList.Contains(tab.table[i].Remote.Address))
                                        {
                                            ipAddress = tab.table[i].Local.Address.ToString();
                                            break;
                                        }
                                    }
                                }
                                Console.WriteLine("{0}: GetTcpTable end.", DateTime.Now.ToString("HH:mm:ss fff"));
                            }
                        }
                        return(!string.IsNullOrEmpty(ipAddress));
                    }
                }
                catch
                {
                }
                finally
                {
                    c.Close();
                }
            }
            return(false);
        }
Esempio n. 5
0
        public static bool IsPortBusy(int port)
        {
            MIB_TCPTABLE tcpTableData = GetTcpTableInfo();

            return(false);
        }