閱讀542 返回首頁    go 阿裏雲 go 技術社區[雲棲]


C#掃描計算機端口

using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Threading; namespace PortScanner { class Program {  //已掃描端口數目  internal static int scannedCount = 0;  //正在運行的線程數目  internal static int runningThreadCount = 0;  //打開的端口數目  internal static List<int> openedPorts = new List<int>();  //起始掃描端口  static int startPort = 1;  //結束端口號  static int endPort = 500;  //最大工作線程數  static int maxThread = 10;  static void Main(string[] args)  {   //接收傳入參數一作為要掃描的主機   string host = "192.168.0.1";   //接收傳入參數二作為端口掃描範圍,如1-4000   string portRange = "1-400";   startPort = int.Parse(portRange.Split('-')[0].Trim());   endPort = int.Parse(portRange.Split('-')[1].Trim());   for (int port = startPort; port < endPort; port++)   {    //創建掃描類    Scanner scanner = new Scanner(host, port);    Thread thread = new Thread(new ThreadStart(scanner.Scan));    thread.Name = port.ToString();     thread.IsBackground = true;    //啟動掃描線程    thread.Start();    runningThreadCount++;    Thread.Sleep(10);    //循環,直到某個線程工作完畢才啟動另一新線程,也可以叫做推拉窗技術    while (runningThreadCount >= maxThread) ;   }   //空循環,直到所有端口掃描完畢   while (scannedCount + 1 < (endPort - startPort)) ;    Console.WriteLine();    Console.WriteLine();    //輸出結果    Console.WriteLine("Scan for host: {0} has been completed , /n total {1} ports scanned, /nopened ports :{2}", host, (endPort - startPort), openedPorts.Count);   foreach (int port in openedPorts)    Console.WriteLine("/tPort: {0} is open", port.ToString().PadLeft(6));  } } //掃描類 class Scanner {  string m_host;  int m_port;    public Scanner(string host, int port)  {   m_host = host; m_port = port;  }  public void Scan()  {   //我們直接使用比較高級的TcpClient類   TcpClient tc = new TcpClient();   //設置超時時間   tc.SendTimeout = tc.ReceiveTimeout = 2000;   try   {    //Console.Write("Checking port: {0}", m_port);    //嚐試連接    tc.Connect(m_host, m_port);    if (tc.Connected)    {     //如果連接上,證明此端口為開放狀態     Console.WriteLine("Port {0} is Open", m_port.ToString().PadRight(6));     Program.openedPorts.Add(m_port);    }   }   catch (System.Net.Sockets.SocketException e)   {    //容錯處理    Console.WriteLine("Port {0} is closed", m_port.ToString().PadRight(6));     //Console.WriteLine(e.Message);    }    finally    {     tc.Close();     tc = null;     Program.scannedCount++;   Program.runningThreadCount--;     //Console.WriteLine(Program.scannedCount);      }   } } }

最後更新:2017-04-02 04:01:44

  上一篇:go [原創](2010.02.07更新)忙裏偷閑中寫的一個係統物理/虛擬內存查看器。
  下一篇:go 智捷教育關東升老師Java視頻