zoukankan      html  css  js  c++  java
  • C#扫描指定IP端口

    //===========================================================
    //    C# 实现端口扫描
    //===========================================================
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Net;
    using System.Net.Sockets;
    
    using System.Threading;
    
    namespace ConApp
    {
        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 = 100;
    
    
            static void Main(string[] args)
            {
                //简单提示
                Console.WriteLine("////////////////////////////////////////////////////////////////////////////////////");
                Console.WriteLine("//   Writer;Feeling");
                Console.WriteLine("////////////////////////////////////////////////////////////////////////////////////");
                Console.WriteLine("请输入要扫描的主机;");
                string host = Console.ReadLine();
                Console.WriteLine("请输入扫描的端口 例如:1-800");
                string portRange = Console.ReadLine();
                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, \n opened ports:{2}", host, (endPort - startPort), openedPorts.Count);
    
                foreach (int port in openedPorts)
                {
                    Console.WriteLine("\tport: {0} is open", port.ToString().PadLeft(6));
                }
    
                Console.ReadLine();
    
            }
        }
    
        class Scanner
        {
            string m_host;
            int m_port;
    
            public Scanner(string host, int port)
            {
                m_host = host;
                m_port = port;
            }
            public void Scan()
            {
                TcpClient tc = new TcpClient();
                tc.SendTimeout = tc.ReceiveTimeout = 2000;
    
                try
                {
                    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
                {
                    Console.WriteLine("Port {0} is Closed", m_port.ToString().PadRight(6));
                }
                finally
                {
                    tc.Close();
                    tc = null;
                    Program.scannedCount++;
                    Program.runningThreadCount--;
                }
            }
    
        }
    } 
  • 相关阅读:
    Redis 如何设置密码及验证密码?
    怎么测试 Redis 的连通性?
    Redis 的内存用完了会发生什么?
    假如 Redis 里面有 1 亿个 key,其中有 10w 个 key 是以 某个固定的已知的前缀开头的,如果将它们全部找出来?
    使用过 Redis 做异步队列么,你是怎么用的?
    简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 ?
    你怎么看到为表格定义的所有索引?
    深入理解卷积网络的卷积
    OpenCV-Python 图像阈值 | 十五
    OpenCV-Python 图像的几何变换 | 十四
  • 原文地址:https://www.cnblogs.com/wugang/p/2740885.html
Copyright © 2011-2022 走看看