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--;
                }
            }
    
        }
    } 
  • 相关阅读:
    网络流 方阵移动
    NOI2019滚粗记
    PKUSC2019游记
    CQOI十二省联考游记
    数学结论题 书堆
    计算几何 大灾变
    51NOD 1773 A国的贸易
    BZOJ 3944
    51Nod 1238
    NOIP2018游记
  • 原文地址:https://www.cnblogs.com/wugang/p/2740885.html
Copyright © 2011-2022 走看看