自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

如何通過(guò)C#制作端口掃描器

安全 黑客攻防
端口掃描器相信大家并不陌生,不過(guò)這次本文主要教給大家通過(guò)C#語(yǔ)言自己制作端口掃描器。雖然只能夠掃描TCP端口,但是希望通過(guò)文章使廣大的管理員能夠在技術(shù)上有所提升。

面對(duì)互聯(lián)網(wǎng)、面對(duì)黑客相信廣大的管理員也好還是用戶(hù)也好都并不陌生。那你們一定聽(tīng)說(shuō)過(guò)端口掃描器這個(gè)名詞。XScanner和SuperScanner相信使用過(guò)端口掃描器的朋友并不陌生,那么你們有沒(méi)有想過(guò)自己嘗試制作端口掃描器呢?今天我們就為大家介紹一下,通過(guò)C#自己制作端口掃描器。

今天主要使用到的是System.Net和System.Threading名稱(chēng)空間。
 

1

2using System;

3using System.Collections.Generic;

4using System.Text;

5

6using System.Net;

7using System.Net.Sockets;

8

9using System.Threading;

10

11namespace PortScanner

12{

13 class Program

14 {

15  //已掃描端口數(shù)目

16  internal static int scannedCount = 0;

17  //正在運(yùn)行的線(xiàn)程數(shù)目

18  internal static int runningThreadCount = 0;

19  //打開(kāi)的端口數(shù)目

20  internal static List<int> openedPorts = new List<int>();

21  //起始掃描端口

22  static int startPort = 1;

23  //結(jié)束端口號(hào)

24  static int endPort = 500;

25  //***工作線(xiàn)程數(shù)

26  static int maxThread = 100;

27  static void Main(string[] args)

28  {

29   //接收傳入?yún)?shù)一作為要掃描的主機(jī)

30   string host = args[0];

31   //接收傳入?yún)?shù)二作為端口掃描范圍,如1-4000

32   string portRange = args[1];

33   startPort = int.Parse(portRange.Split('-')[0].Trim());

34   endPort = int.Parse(portRange.Split('-')[1].Trim());

35

36   for (int port = startPort; port < endPort; port++)

37   {

38    //創(chuàng)建掃描類(lèi)

39    Scanner scanner = new Scanner(host, port);

40    Thread thread = new Thread(new ThreadStart(scanner.Scan));

41    thread.Name = port.ToString();

42    thread.IsBackground = true;

43    //啟動(dòng)掃描線(xiàn)程

44    thread.Start();

45

46    runningThreadCount++;

47

48    Thread.Sleep(10);

49    //循環(huán),直到某個(gè)線(xiàn)程工作完畢才啟動(dòng)另一新線(xiàn)程,也可以叫做推拉窗技術(shù)

50    while (runningThreadCount >= maxThread) ;#p#

51   }

52

53   //空循環(huán),直到所有端口掃描完畢

54   while (scannedCount + 1 < (endPort - startPort)) ;

55

56    Console.WriteLine();

57    Console.WriteLine();

58    //輸出結(jié)果

59    Console.WriteLine("Scan for host: {0} has been completed , \n total {1} ports

scanned, \nopened ports :{2}",

60 host, (endPort - startPort), openedPorts.Count);

61

62   foreach (int port in openedPorts)

63    Console.WriteLine("\tPort: {0} is open", port.ToString().PadLeft(6));

64  }

65 }

66

67 //掃描類(lèi)

68 class Scanner

69 {

70  string m_host;

71  int m_port;

72 

73  public Scanner(string host, int port)

74  {

75   m_host = host; m_port = port;

76  }

77

78  public void Scan()

79  {

80   //我們直接使用比較高級(jí)的TcpClient類(lèi)

81   TcpClient tc = new TcpClient();

82   //設(shè)置超時(shí)時(shí)間

83   tc.SendTimeout = tc.ReceiveTimeout = 2000;

84   try

85   {

86    //Console.Write("Checking port: {0}", m_port);

87    //嘗試連接

88    tc.Connect(m_host, m_port);

89    if (tc.Connected)

90    {

91     //如果連接上,證明此商品為開(kāi)放狀態(tài)

92     Console.WriteLine("Port {0} is Open", m_port.ToString().PadRight(6));

93     Program.openedPorts.Add(m_port);

94    }

95   }

96   catch (System.Net.Sockets.SocketException e)

97   {

98    //容錯(cuò)處理

99    Console.WriteLine("Port {0} is closed", m_port.ToString().PadRight(6));

100    //Console.WriteLine(e.Message);

101   }

102   finally

103   {

104    tc.Close();

105    tc = null;

106    Program.scannedCount++;

107    Program.runningThreadCount--;

108

109    //Console.WriteLine(Program.scannedCount);

110  

111   }

112  }

113 }

114}

115

通過(guò)以上代碼我們就可以自己制作端口掃描器了,不過(guò)只能實(shí)現(xiàn)TCP端口掃描。

【編輯推薦】

  1. 端口掃描工具nmap使用介紹
  2. 網(wǎng)絡(luò)安全掃描工具Nessus
責(zé)任編輯:張啟峰 來(lái)源: 中國(guó)IT實(shí)驗(yàn)室
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)