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

目录
相关文章
|
7天前
|
监控 安全 网络协议
计算机端口:网络通信的桥梁
计算机端口是网络通信的逻辑通道,支持数据传输和服务识别。本文介绍端口定义、分类(知名、注册、动态端口)、作用及管理方法,涵盖常用知名端口如HTTP(80)、HTTPS(443)等,并强调端口安全配置的重要性,帮助读者全面理解这一关键组件。
30 6
|
2月前
|
安全 Linux 网络安全
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息
nmap 是一款强大的开源网络扫描工具,能检测目标的开放端口、服务类型和操作系统等信息。本文分三部分介绍 nmap:基本原理、使用方法及技巧、实际应用及案例分析。通过学习 nmap,您可以更好地了解网络拓扑和安全状况,提升网络安全管理和渗透测试能力。
195 5
|
3月前
|
网络安全 Python
Python编程--目标IP地址段主机指定端口状态扫描
Python编程--目标IP地址段主机指定端口状态扫描
68 1
|
4月前
|
Linux Python
用python扫描linux开放的端口(3种方式)
这篇文章介绍了三种使用Python实现Linux端口扫描的方法,包括基础版端口扫描、全端口扫描和多线程扫描技术。
87 15
|
5月前
|
网络安全 网络架构
Nmap扫描六种端口状态介绍
Nmap扫描六种端口状态介绍
192 2
|
8月前
扫描端口nc
扫描端口nc
44 0
|
8月前
|
网络协议
第二轮学习笔记: 扫描工具 -- nmap端口扫描
第二轮学习笔记: 扫描工具 -- nmap端口扫描
98 0
|
XML 网络协议 安全
主动扫描-Nmap-端口、系统、服务扫描
主动扫描-Nmap-端口、系统、服务扫描
314 0
|
Python
python 扫描局域网主机、爆破端口
python 扫描局域网主机、爆破端口
116 0
|
运维 网络协议 安全
网络运维之计算机端口
网络运维之计算机端口
219 0
网络运维之计算机端口

热门文章

最新文章

下一篇
开通oss服务