• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            隨筆 - 224  文章 - 41  trackbacks - 0
            <2010年6月>
            303112345
            6789101112
            13141516171819
            20212223242526
            27282930123
            45678910

            享受編程

            常用鏈接

            留言簿(11)

            隨筆分類(159)

            隨筆檔案(224)

            文章分類(2)

            文章檔案(4)

            經(jīng)典c++博客

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            原文地址:http://blog.csdn.net/yulinlover/archive/2009/02/08/3868824.aspx

            public class NativeFunc   
            {   
                [StructLayout(LayoutKind.Sequential)]   
                
            public class MIB_TCPROW   
                
            {   
                    
            public int dwState;   
                    
            public int dwLocalAddr;   
                    
            public int dwLocalPort;   
                    
            public int dwRemoteAddr;   
                    
            public int dwRemotePort;   
                }
               
              
                [StructLayout(LayoutKind.Sequential)]   
                
            public class MIB_TCPTABLE   
                
            {   
                    
            public int dwNumEntries;   
                    
            public MIB_TCPROW[] table;   
                }
               
              
                [DllImport(
            "Iphlpapi.dll")]   
                
            static extern int GetTcpTable(IntPtr pTcpTable, ref int pdwSize, bool bOrder);   
              
                [DllImport(
            "Iphlpapi.dll")]   
                
            static extern int SendARP(Int32 DestIP, Int32 SrcIP, ref Int64 MacAddr, ref Int32 PhyAddrLen);   
              
                [DllImport(
            "Ws2_32.dll")]   
                
            static extern Int32 inet_addr(string ipaddr);   
              
                [DllImport(
            "Ws2_32.dll")]   
                
            static extern ushort ntohs(ushort netshort);   
              
                
            //SendArp獲取MAC地址   
                public static string GetMacAddress(string macip)   
                
            {   
                    StringBuilder strReturn 
            = new StringBuilder();   
                    
            try  
                    
            {   
                        Int32 remote 
            = inet_addr(macip);   
              
                        Int64 macinfo 
            = new Int64();   
                        Int32 length 
            = 6;   
                        SendARP(remote, 
            0ref macinfo, ref length);   
              
                        
            string temp = System.Convert.ToString(macinfo, 16).PadLeft(12'0').ToUpper();   
              
                        
            int x = 12;   
                        
            for (int i = 0; i < 6; i++)   
                        
            {   
                            
            if (i == 5{ strReturn.Append(temp.Substring(x - 22)); }   
                            
            else { strReturn.Append(temp.Substring(x - 22+ ":"); }   
                            x 
            -= 2;   
                        }
               
              
                        
            return strReturn.ToString();   
                    }
               
                    
            catch  
                    
            {   
                        
            return string.Empty;   
                    }
               
                }
               
              
                
            public static bool IsHostAlive(string strHostIP)   
                
            {   
                    
            string strHostMac = GetMacAddress(strHostIP);   
                    
            return !string.IsNullOrEmpty(strHostMac);   
                }
               
              
                
            public static MIB_TCPTABLE GetTcpTableInfo()   
                
            {   
                    
            //聲明一個(gè)指針準(zhǔn)備接受Tcp連接信息   
                    IntPtr hTcpTableData = IntPtr.Zero;   
              
                    
            //聲明hTcpTableData指針?biāo)赶虻膬?nèi)存緩沖區(qū)大小   
                    int iBufferSize = 0;   
              
                    
            //聲明MIB_TCPTABLE對(duì)象,作為返回值   
                    MIB_TCPTABLE tcpTable = new MIB_TCPTABLE();   
                       
                    
            //聲明一個(gè)List對(duì)象來(lái)臨時(shí)存放MIB_TCPROW對(duì)象   
                    List<MIB_TCPROW> lstTcpRows = new List<MIB_TCPROW>();   
                       
                    
            //調(diào)用API來(lái)獲得真正的緩沖區(qū)大小,iBufferSize默認(rèn)為0,   
                    
            //這時(shí)調(diào)用API GetTcpTable會(huì)觸發(fā)一個(gè)異常ERROR_INSUFFICIENT_BUFFER   
                    
            //通過(guò)這個(gè)異常系統(tǒng)會(huì)把真正的緩沖長(zhǎng)度返回   
                    GetTcpTable(hTcpTableData, ref iBufferSize, false);   
              
                    
            //為托管指針在堆上分配內(nèi)存   
                    hTcpTableData = Marshal.AllocHGlobal(iBufferSize);   
              
                    
            //求得MIB_TCPROW對(duì)象的內(nèi)存字節(jié)數(shù)   
                    int iTcpRowLen = Marshal.SizeOf(typeof(MIB_TCPROW));   
              
                    
            //根據(jù)上面得到的緩沖區(qū)大小來(lái)推算MIB_TCPTABLE里的MIB_TCPROW數(shù)組長(zhǎng)度   
                    
            //下面用緩沖長(zhǎng)度-sizeof(int)也就是去掉MIB_TCPTABLE里的成員dwNumEntries所占用的內(nèi)存字節(jié)數(shù)   
                    int aryTcpRowLength = (int)Math.Ceiling((double)(iBufferSize - sizeof(int)) / iTcpRowLen);   
              
                    
            //重新取得TcpTable的數(shù)據(jù)   
                    GetTcpTable(hTcpTableData, ref iBufferSize, false);   
              
                    
            //下面是關(guān)鍵,由于MIB_TCPTABLE里的成員有一個(gè)是數(shù)組,而這個(gè)數(shù)組長(zhǎng)度起初我們是不能確定的   
                    
            //所以這里我們只能根據(jù)分配的指針來(lái)進(jìn)行一些運(yùn)算來(lái)推算出我們所要的數(shù)據(jù)   
                    for (int i = 0; i < aryTcpRowLength; i++)   
                    
            {   
                        
            //hTcpTableData是指向MIB_TCPTABLE緩沖區(qū)的內(nèi)存起始區(qū)域,由于其成員數(shù)據(jù)在內(nèi)存中是順序排列   
                        
            //所以我們可以推斷hTcpTableData+4(也就是sizeof(dwNumEntries)的長(zhǎng)度)后就是MIB_TCPROW數(shù)組的第一個(gè)元素   
                        IntPtr hTempTableRow = new IntPtr(hTcpTableData.ToInt32() + 4 + i * iTcpRowLen);   
                        MIB_TCPROW tcpRow 
            = new MIB_TCPROW();   
                        tcpRow.dwLocalAddr 
            = 0;   
                        tcpRow.dwLocalPort 
            = 0;   
                        tcpRow.dwRemoteAddr 
            = 0;   
                        tcpRow.dwRemotePort 
            = 0;   
                        tcpRow.dwState 
            = 0;   
              
                        
            //把指針數(shù)據(jù)拷貝到我們的結(jié)構(gòu)對(duì)象里。   
                        Marshal.PtrToStructure(hTempTableRow, tcpRow);   
                        lstTcpRows.Add(tcpRow);   
                    }
               
              
                    tcpTable.dwNumEntries 
            = lstTcpRows.Count;   
                    tcpTable.table 
            = new MIB_TCPROW[lstTcpRows.Count];   
                    lstTcpRows.CopyTo(tcpTable.table);   
                    
            return tcpTable;   
                }
               
              
                
            public static string GetIpAddress(long ipAddrs)   
                
            {   
                    
            try  
                    
            {   
                        System.Net.IPAddress ipAddress 
            = new System.Net.IPAddress(ipAddrs);   
                        
            return ipAddress.ToString();   
                    }
               
                    
            catch return ipAddrs.ToString(); }   
                       
                }
               
              
                
            public static ushort GetTcpPort(int tcpPort)   
                
            {   
                    
            return ntohs((ushort)tcpPort);   
                }
               
              
                
            public static bool IsPortBusy(int port)   
                
            {   
                    MIB_TCPTABLE tcpTableData 
            = GetTcpTableInfo();   
                    
            return false;   
                }
               
            }
              


            下面我再把調(diào)用的方式順便寫一下

            private void button1_Click(object sender, EventArgs e)   
            {   
                NativeFunc.MIB_TCPTABLE tcpTableData 
            = new NativeFunc.MIB_TCPTABLE();   
                tcpTableData 
            = NativeFunc.GetTcpTableInfo();   
                
            for (int i = 0; i < tcpTableData.dwNumEntries; i++)   
                
            {   
                    
            this.richTextBox1.AppendText(string.Format("{0}:{1}-->>{2}:{3}\n",   
                        NativeFunc.GetIpAddress(tcpTableData.table[i].dwLocalAddr),   
                        NativeFunc.GetTcpPort(tcpTableData.table[i].dwLocalPort).ToString(),   
                        NativeFunc.GetIpAddress(tcpTableData.table[i].dwRemoteAddr),   
                        NativeFunc.GetTcpPort(tcpTableData.table[i].dwRemotePort).ToString()));   
                }
               
            }
            代碼下載

            也可以使用cmd命令,Netstat
            具體參考:
            http://www.cnblogs.com/honour/archive/2008/08/04/1260206.html
            posted on 2010-06-13 17:12 漂漂 閱讀(1683) 評(píng)論(0)  編輯 收藏 引用 所屬分類: c#開(kāi)發(fā)
            99久久这里只有精品| 久久精品国产男包| 久久播电影网| 久久久久久国产a免费观看黄色大片 | 奇米综合四色77777久久| 久久婷婷五月综合97色一本一本 | 久久国产V一级毛多内射| 久久久99精品成人片中文字幕| 亚洲欧美一级久久精品| 97久久国产亚洲精品超碰热 | 精品人妻久久久久久888| 久久久久无码精品| 99久久精品国内| 伊人久久精品影院| 国产精品亚洲美女久久久| 国产亚洲精久久久久久无码77777| 久久亚洲高清观看| 国内精品久久久久久久久电影网| 99国内精品久久久久久久| 一本久道久久综合狠狠爱| 久久亚洲中文字幕精品一区| 国产∨亚洲V天堂无码久久久| 欧美亚洲国产精品久久久久| 国产成人久久精品二区三区| 激情伊人五月天久久综合| 欧美日韩久久中文字幕| 日产久久强奸免费的看| 久久er国产精品免费观看8| 老司机国内精品久久久久| 99久久精品国产高清一区二区| 久久综合精品国产二区无码| 久久久久青草线蕉综合超碰| 久久久久久国产a免费观看黄色大片| 久久黄视频| 亚洲一区精品伊人久久伊人| 亚洲美日韩Av中文字幕无码久久久妻妇 | 色欲综合久久躁天天躁| 久久精品亚洲欧美日韩久久| 久久国产午夜精品一区二区三区| 国产精品日韩深夜福利久久| 精品乱码久久久久久夜夜嗨|