如何付款 | 地理位置 | 帮助中心
 
 
 
黑客进阶之利用C#设计制作端口扫描器
网络  发表时间 2007-1-17

上网很久的朋友一定对端口扫描器不会陌生吧。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端口哦。

(t003)

关键词:黑客、C# 、上海网站建设、专业网站建设、网站制作、网站推广服务

 

-->更多相关新闻
版权所有©2005 上海巧创网络技术有限公司 沪 ICP 备 05001802 号
网络实名: 上海网站建设上海网络公司上海仓存管理软件 电话: 021-50757260 50769776 50758883 传真: 50757260-14
地址:上海市浦东枣庄路 683 号(金杨经济服务中心) 6 楼 邮编 :201206 E-mail:webmaster@soeasy.cn