| 首页 | 技术文章 | 软件下载 | 博客 | 论坛 | 精品教程 | 黑客动画 | 视频资源 | 在线服务 | 黑客游戏 | 

您现在的位置: 中国X黑客小组 >> 技术文章 >> 编程技术 >> 黑客编程 >> 文章正文 用户登录 新用户注册
  利用C#设计制作端口扫描器          【字体:
利用C#设计制作端口扫描器
作者:smtk    文章来源:网络    点击数:    更新时间:2007-1-22    

上网很久的朋友一定对端口扫描器不会陌生吧。XScanner和SuperScanner大家一定都使用过。今天我们就用最新的.Net技术来制作一个自己的端口扫描器!

今天主要使用到的是System.Net和System.Threading名称空间。

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  //已扫描端口数目

16  internal static int scannedCount = 0;

17  //正在运行的线程数目

18  internal static int runningThreadCount = 0;

19  //打开的端口数目

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

21  //起始扫描端口

22  static int startPort = 1;

23  //结束端口号

24  static int endPort = 500;

25  //最大工作线程数

26  static int maxThread = 100;

27  static void Main(string[] args)

28  {

29   //接收传入参数一作为要扫描的主机

30   string host = args[0];

31   //接收传入参数二作为端口扫描范围,如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    //创建扫描类

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    //启动扫描线程

44    thread.Start();

45

46    runningThreadCount++;

47

48    Thread.Sleep(10);

49    //循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术

50    while (runningThreadCount >= maxThread) ;

51   }

52

53   //空循环,直到所有端口扫描完毕

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

55

56    Console.WriteLine();

57    Console.WriteLine();

58    //输出结果

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 //扫描类

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   //我们直接使用比较高级的TcpClient类

81   TcpClient tc = new TcpClient();

82   //设置超时时间

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     //如果连接上,证明此商品为开放状态

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    //容错处理

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

116

117

好了,代码很简单吧!只能扫描TCP端口哦。

文章录入:IceRiver    责任编辑:IceRiver 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
    利用最近热门的Xss漏洞能做什
    利用四种自制批处理文件防御
    利用xss漏洞能做什么?
    国家计算机病毒中心发现利用
    Google Gadget存漏洞 可被利
    利用木马程序盗账号3天从银行
    系统安全决定网络安全 黑客入
    MySpace蠕虫病毒利用Fast-Fl
    利用Serv-U自身缺陷提升 Web
    Firefox又现高危漏洞 被黑客
      网友评论:(只显示最新5条。评论内容只代表网友观点,与本站立场无关!)
    Powered by ICE RIVER - STUDIO
    » CnXHacker.CoM   © CopyRight 2002-2006, CnXHacker.CoM™, Inc. All Rights Reserved.