C#进行端口扫描的代码

C#进行端口扫描的代码,第1张

概述C#进行端口扫描的代码

下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。

内存溢出小编现在分享给大家,也给大家做个参考。

using System;using System.Net;using System.Net.sockets;using System.Collections; namespace PortScan{    class Program    {        static voID Main(string[] args)        {            IPAddress ip;            int startPort,endPort;            if (GetPortRange(args,out ip,out startPort,out endPort) == true)  //提取命令行参数            {                Scan(ip,startPort,endPort);   //端口扫描                Console.ReadKey();            }        }         #region 从命令行参数 中提取端口 + static bool GetPortRange(string[] args,out int startPort,out int endPort)                /// <summary>        /// 从命令行参数 中提取端口        /// </summary>        /// <param name="args">命令行参数</param>        /// <param name="ip">输出 IP地址</param>        /// <param name="startPort">输出 起始端口号</param>        /// <param name="endPort">输出 终止端口号</param>        /// <returns>提取成功返回true,否则返回false</returns>        private static bool GetPortRange(string[] args,out IPAddress ip,out int endPort)        {            ip = null;            startPort = endPort = 0;            //帮助 命令            if (args.Length != 0 && (args[0] == "/?" || args[0] == "/help"))            {                Console.Writeline("Scan port from startPort to endPort of the host specifIEd by the IPAddress.");                Console.Writeline("Command Format:");                Console.Writeline("PortScan IPAddress startPort endPort");                Console.Writeline("For example:");                Console.Writeline("PortScan 127.0.0.1 1 1024");                return false;            }            if (args.Length == 3)            {                //解析端口号成功                if (IPAddress.TryParse(args[0],out ip) && int.TryParse(args[1],out startPort) && int.TryParse(args[2],out endPort))                {                    return true;                }                else                {                    Console.Writeline("参数格式不正确!");                    return false;                }            }            else            {                Console.Writeline("参数数目不正确!");                return false;            }        }        #endregion         /// <summary>        /// 端口 扫描        /// </summary>        /// <param name="ip">扫描的 IP地址</param>        /// <param name="startPort">起始端口号</param>        /// <param name="endPort">终止端口号</param>        static voID Scan(IPAddress ip,int startPort,int endPort)        {            Random rand = new Random((int)DateTime.Now.Ticks);            Console.Writeline("Begin Scan...");            for (int port = startPort; port < endPort; port++)            {                Socket scanSocket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.IP);                //寻找一个未使用的端口进行绑定                do                {                    try                    {                        scanSocket.Bind(new IPEndPoint(IPAddress.Any,rand.Next(65535)));                        break;                    }                    catch                    {                        //绑定失败                    }                } while (true);                                try                {                    scanSocket.BeginConnect(new IPEndPoint(ip,port),ScanCallBack,new ArrayList() { scanSocket,port});                }                catch                {                   // Console.Writeline("port {0,5}\tClosed.\n{1}",port,ex.Message);                    continue;                }                           }             Console.Writeline("Port Scan Completed!");        }         /// <summary>        /// BeginConnect的回调函数        /// </summary>        /// <param name="result">异步Connect的结果</param>        static voID ScanCallBack(IAsyncResult result)        {            //解析 回调函数输入 参数            ArrayList arrList = (ArrayList)result.AsyncState;            Socket scanSocket = (Socket)arrList[0];            int port = (int)arrList[1];            //判断端口是否开放            if (result.IsCompleted && scanSocket.Connected)            {                Console.Writeline("port {0,5}\topen.",port);            }            else            {                //Console.Writeline("port {0,5}\tClosed.",port);            }            //关闭套接字            scanSocket.Close();        }    }} 

以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

总结

以上是内存溢出为你收集整理的C#进行端口扫描的代码全部内容,希望文章能够帮你解决C#进行端口扫描的代码所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1238377.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存