下面是内存溢出 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#进行端口扫描的代码所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)