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

时间: 2024-11-10 00:58:28

C#扫描计算机端口的相关文章

计算机端口详解

计算机端口详解 一 摘要 端口是个网络应用中很重要的东西,相当于"门"了. 计算机"端口"是英文port的义译,可以认为是计算机与外界通讯交流的出口.其中硬件领域的端口又称接口,如:USB端口.串行端口等.软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区.     可以先了解面向连接和无连接协议(Connection-Oriented and Connectionless Prot

计算机端口(百度百科)

计算机端口 计算机"端口"是英文port的义译,可以认为是计算机与外界通讯交流的出口.其中硬件领域的端口又称接口,如:USB端口.串行端口等.软件领域的端口一般指网络中面向连接服务和无连接服务的通信协议端口,是一种抽象的软件结构,包括一些数据结构和I/O(基本输入输出)缓冲区. 按端口号可分为3大类: (1)公认端口(Well Known Ports):从0到1023,它们紧密绑定(binding)于一些服务.通常这些端口的通讯明确表明了某种服务的协议.例如:80端口实际上总是HTTP

计算机端口大全

  计算机端口大全如下: 0端口:无效端口,通常用于分析操作系统 1端口:传输控制协议端口服务多路开关选择器 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口:丢弃 11端口:在线用户 13端口:时间 17端口:每日引用 18端口:消息发送协议 19端口:字符发生器 20端口:FTP文件传输协议(默认数据口) 21端口:FTP文件传输协议(控制) 22端口:SSH远程登录协议 23端口:telnet(终端仿真协议),木马Tiny Telnet Server开放此

win7旗舰版系统下开启计算机端口的两个方法

  方法一.通过服务开启计算机端口 1.首先点击win7系统"开始--运行",在运行对话框中输入"services.msc",然后回车; 2.在服务窗口中找到对应要开启的端口对应的服务,双击打开; 3.在"启动类型"选择"自动",在"服务状态"中单击"启动"按钮即可启用该端口,最后,单击"确定"按钮即可. 方法二.通过TCP/IP协议属性开启计算机端口 1.首先点击w

MFC 扫描COM端口程序

                                             MFC 扫描COM端口程序         MFC 扫描COM端口程序源代码   主要功能简介:   核心函数就是Scan.不仅可以扫描出实际的蓝牙,打印机等COM端口,而且还可以扫描出虚拟机来的COM端口. 不仅可以显示名称,还可以显示生产厂商的具体参数     /* func name: Scan description: Scan and display the COM port informatio

防火墙设置必备的参考资料计算机端口详细列表第1/6页_安全设置

端口:0  服务:Reserved  说明:通常用于分析操作系统.这一方法能够工作是因为在一些系统中"0"是无效端口,当你试图使用通常的闭合端口连接它时将产生不同的结果.一种典型的扫描,使用IP地址为0.0.0.0,设置ACK位并在以太网层广播. 端口:1  服务:tcpmux  说明:这显示有人在寻找SGI Irix机器.Irix是实现tcpmux的主要提供者,默认情况下tcpmux在这种系统中被打开.Irix机器在发布是含有几个默认的无密码的帐户,如:IP.GUEST UUCP.N

nmap扫描服务器端口(远程桌面端口)_Linux

我经常用它来检测远程的 Windows服务器的ip地址,因为不是固定ip地址,该服务器的ip地址会经常变化,但是有个规律,只在一个网段内变化,这样就给ip地址的确定带来 了方便.1. 如果没有安装nmap,就安装 yum install -y nmap2. 扫描指定网段的远程桌面连接端口nmap -sT -p3389 218.206.112.0/243. 如果觉得输出太多,可以用 grep 命令过滤nmap -sT -p3389 218.206.112.0/24 | grep -B2 open 

C#扫描网络计算机端口漏洞

问题描述 我想用C#扫描网络计算机中的漏洞,现在能枚举网络计算机中开放的端口,请问用C#如何扫描端口的漏洞?诸如FTP,IIS,CGI漏洞等?可不可以提供点思路或者参考的代码?万分感谢.基于C#的端口攻击也可以的~ 解决方案 解决方案二:首先我不知道准确的漏洞定义是什么.我原来写过一个小程序,对某个IP从0-65535的端口循环访问.能连上的就是开放的,连不上的就是没开放的.解决方案三:请问用C#如何扫描端口的漏洞?首先就是对目标主机进行端口扫描,得到主机开放的端口,然后确定端口的服务类型.如2

window/linux批量扫描IP端口程序脚本

假设1.txt文件内容为 127.0.0.1 192.168.1.1 然后我们获取文件内容IP进行扫描window .bat版本 :1.txt为文件名,根据需求进行修改 :C:\nmap\nmap-6.46\nmap.exe 为namp的路径,根据需求进行修改 :把1.txt与该扫描脚本放一起  代码如下 复制代码 @echo off for /f "delims=." %%i in (1.txt) do C:\nmap\nmap-6.46\nmap.exe -T3 -A -v -p-