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);      }   } } }

目录
相关文章
|
30天前
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
|
2月前
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
55 15
|
3月前
|
网络安全 网络架构
Nmap扫描六种端口状态介绍
Nmap扫描六种端口状态介绍
86 2
|
6月前
扫描端口nc
扫描端口nc
33 0
|
6月前
|
网络协议
第二轮学习笔记: 扫描工具 -- nmap端口扫描
第二轮学习笔记: 扫描工具 -- nmap端口扫描
77 0
|
11月前
|
XML 网络协议 安全
主动扫描-Nmap-端口、系统、服务扫描
主动扫描-Nmap-端口、系统、服务扫描
234 0
|
12月前
|
Python
python 扫描局域网主机、爆破端口
python 扫描局域网主机、爆破端口
94 0
|
安全 网络协议 NoSQL
对内网服务端口进行扫描
对内网服务端口进行扫描,根据开放的端口服务选择横向的方法。
335 1
|
网络协议
第二轮学习笔记: 扫描工具 -- nmap端口扫描
第二轮学习笔记: 扫描工具 -- nmap端口扫描
211 0
第二轮学习笔记: 扫描工具 -- nmap端口扫描
|
网络安全 Python
批量探测IP端口检查是否有存在网站导入AWVS进行扫描
批量探测IP端口检查是否有存在网站导入AWVS进行扫描
批量探测IP端口检查是否有存在网站导入AWVS进行扫描