利用C#设计端口扫描器

2016-02-19 15:07 45 1 收藏

下面请跟着图老师小编一起来了解下利用C#设计端口扫描器,精心挑选的内容希望大家喜欢,不要忘记点个赞哦!

【 tulaoshi.com - 编程语言 】

  上网很久的朋友一定对端口扫描器不会陌生吧。XScanner,SuperScanner大家一定都使用过。

  今天我们就用最新的.Net技术来制作一个自己的端口扫描器!

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

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

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)
12using System;3using System.Collections.Generic;4using System.Text;56using System.Net;7using System.Net.Sockets;89using System.Threading;1011namespace PortScanner12{13 class Program14 {15  //已扫描端口数目16  internal static int scannedCount = 0;17  //正在运行的线程数目18  internal static int runningThreadCount = 0;19  //打开的端口数目20  internal static Listint openedPorts = new Listint();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-400032   string portRange = args[1];33   startPort = int.Parse(portRange.Split('-')[0].Trim());34   endPort = int.Parse(portRange.Split('-')[1].Trim());3536   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();4546    runningThreadCount++;4748    Thread.Sleep(10);49    //循环,直到某个线程工作完毕才启动另一新线程,也可以叫做推拉窗技术50    while (runningThreadCount = maxThread) ;51   }5253   //空循环,直到所有端口扫描完毕54   while (scannedCount + 1  (endPort - startPort)) ;5556    Console.WriteLine();57    Console.WriteLine();58    //输出结果59    Console.WriteLine("Scan for host: {0} has been completed ,total {1} ports scanned,opened ports :{2}",60 host, (endPort - startPort), openedPorts.Count);6162   foreach (int port in openedPorts)63    Console.WriteLine("  Port: {0} is open", port.ToString().PadLeft(6));64  }65 }6667 //扫描类68 class Scanner69 {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  }7778  public void Scan()79  {80   //我们直接使用比较高级的TcpClient类81   TcpClient tc = new TcpClient();82   //设置超时时间83   tc.SendTimeout = tc.ReceiveTimeout = 2000;84   try85   {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   finally103   {104    tc.Close();105    tc = null;106    Program.scannedCount++;107    Program.runningThreadCount--;108109    //Console.WriteLine(Program.scannedCount);110  111   }112  }113 }114}115116117

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

来源:http://www.tulaoshi.com/n/20160219/1608895.html

延伸阅读
如果叫你实现远程启动别人的计算机,你首先想到的可能是先做一个在远程计算机上面运行客户端程序,然后在本地计算机上面再做一个服务器端程序,通过这二个程序直接的通讯实现重启远程计算机。这当然是一个方法。但这未免有点麻烦。如果现在只告诉你远程计算机的管理者的登陆帐号,而并不允许你在远程的计算机上面运行一个所谓的客户端程序...
ICMP就是所谓的Internet控制报文协议(Internet Control Message Protocol),在网络中,一般用它来传递差错报文以及其他应注意的信息。ICMP一般被认为是和IP协议同一层的协议,IMCP报文通常被IP层或者更高层的协议(如:TCP或者UDP)使用,ICMP对于互联网以及其他基于IP协议的网络的正常运行起着非常重要的作用。有许多重要的网络程序都是...
通过编程方式实现短信息的发送对很多人来说是一件比较烦杂的事情,目前一般的解决方法是通过计算机和手机的连线,通过可对手机编程的语言编写相关的手机短信息程序来实现,而这种方法对于一般人来说是很难达到的,因为此种方法不仅要有很多必备的硬件设备,也还需懂得手机编程的相关知识。本文就来探讨一下另外一种通过Visual C#发送短信息...
管道技术一般采用Window API来实现,最近我试着用C#来实现Windows管道技术,发现C#本身方便的进程线程机制使工作变得简单至极,随手记录一下,推荐给大家。 首先,我们可以通过设置Process类,获取输出接口,代码如下: Process proc = new Process();proc .StartInfo.FileName = strScript;proc .StartInfo.WorkingDirectory =...
引言: 微软的新的.NET平台为开发者带来了许多新的诸如GDI+、Globalization之类的编程机制,同时还发明了一门全新的类似Java的编程语言-C#。对于这些新知识,我们应尽快了解、掌握并试图运用到实践项目中去,而通过实例学习的方法无疑是一个非常有效的途径。本文就通过一个简单的实例,向大家展示了在Visual C#中如何运用GDI+和Unsafe...

经验教程

384

收藏

82
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部