先引入命名空間:
using System.Collections;<br />using System.Management;<br />using System.Net;<br />using System.Net.Sockets;
再編寫代碼如下:
public void scanPort()<br /> {<br /> string availPorts = "";<br /> string usedPorts = "";<br /> ManagementClass manage = new ManagementClass("Win32_NetworkAdapterConfiguration");<br /> ManagementObjectCollection objCollection = manage.GetInstances();<br /> ArrayList ips = new ArrayList();<br /> foreach(ManagementObject obj in objCollection )<br /> {<br /> if((bool)obj["IPEnabled"])<br /> {<br /> Array ipArray = (Array)obj.Properties["IPAddress"].Value;<br /> ips.Add(ipArray.GetValue(0).ToString());<br /> }<br /> }<br /> ips.Add("127.0.0.1");<br /> ips.Add("0.0.0.0");</p><p> string ports = "";<br /> Socket sock;<br /> IPEndPoint endPoint;<br /> for (int i = 2; i < 10000; i++)<br /> {</p><p> for (int j = 0; j < ips.Count; j++)<br /> {<br /> try<br /> {<br /> if (i ==1031)<br /> {<br /> string aaa = "";<br /> }<br /> sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);<br /> endPoint = new IPEndPoint(IPAddress.Parse(ips[j].ToString()), i);<br /> sock.Bind(endPoint);<br /> sock.Close();</p><p> availPorts += "|" + i;</p><p> }<br /> catch(Exception ex)<br /> {</p><p> usedPorts += "|" + i;<br /> break;<br /> }<br /> }</p><p> }</p><p> availPorts += "end";<br /> usedPorts += "end";<br /> }
結果中:
availPorts 為可用連接埠
usedPorts 為已使用連接埠