当前位置: 首页 > news >正文

网站主服务器域名广告联盟点击赚钱平台

网站主服务器域名,广告联盟点击赚钱平台,政府门户网站建设管理工作总结,百度移动网站检测C#实现多线程局域网扫描器的思路与具体代码 思路: 获取局域网内所有 IP 地址遍历所有 IP 地址,使用 Ping 命令测试主机是否在线如果主机在线,则扫描主机上的所有端口,确定哪些端口是开放的输出扫描结果 在上述过程中&#xff0…

C#实现多线程局域网扫描器的思路与具体代码

思路:

  1. 获取局域网内所有 IP 地址
  2. 遍历所有 IP 地址,使用 Ping 命令测试主机是否在线
  3. 如果主机在线,则扫描主机上的所有端口,确定哪些端口是开放的
  4. 输出扫描结果

在上述过程中,第 2 步和第 3 步都可以使用多线程来加速。具体来说,可以将 IP 地址分成若干段,每个线程负责扫描一段 IP 地址。对于每个 IP 地址,也可以启动一个线程来扫描其端口。

具体代码:

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets;
using System.Threading;namespace LANScanner
{class Program{// 扫描参数static int numThreads = 100;static int timeout = 100;static void Main(string[] args){// 获取本地 IP 地址和子网掩码IPAddress[] addresses = Dns.GetHostAddresses(Dns.GetHostName());IPAddress subnetMask = null;foreach (NetworkInterface adapter in NetworkInterface.GetAllNetworkInterfaces()){IPInterfaceProperties properties = adapter.GetIPProperties();foreach (UnicastIPAddressInformation addressInfo in properties.UnicastAddresses){if (addressInfo.Address.AddressFamily == AddressFamily.InterNetwork){subnetMask = addressInfo.IPv4Mask;break;}}if (subnetMask != null){break;}}// 计算子网地址和广播地址IPAddress subnetAddress = GetSubnetAddress(addresses[0], subnetMask);IPAddress broadcastAddress = GetBroadcastAddress(addresses[0], subnetMask);// 创建线程池并开始扫描List<WaitHandle> handles = new List<WaitHandle>();ThreadPool.SetMinThreads(numThreads, numThreads);for (int i = 1; i <= 254; i++){IPAddress ip = GetIPAddress(subnetAddress, i);handles.Add(new ManualResetEvent(false));ThreadPool.QueueUserWorkItem(PingHost, new object[] { ip, handles.Last() });}WaitHandle.WaitAll(handles.ToArray());Console.WriteLine("Scanning complete.");Console.ReadLine();}static void PingHost(object args){// 解析参数object[] parameters = (object[])args;IPAddress ip = (IPAddress)parameters[0];ManualResetEvent handle = (ManualResetEvent)parameters[1];// 测试主机是否在线Ping ping = new Ping();PingReply reply = ping.Send(ip, timeout);if (reply.Status == IPStatus.Success){Console.WriteLine("Host {0} is online.", ip);// 扫描主机上的端口List<WaitHandle> handles = new List<WaitHandle>();for (int port = 1; port <= 65535; port++){handles.Add(new ManualResetEvent(false));ThreadPool.QueueUserWorkItem(CheckPort, new object[] { ip, port, handles.Last() });}WaitHandle.WaitAll(handles.ToArray());}// 通知主线程完成handle.Set();}static void CheckPort(object args){// 解析参数object[] parameters = (object[])args;IPAddress ip = (IPAddress)parameters[0];int port = (int)parameters[1];ManualResetEvent handle = (ManualResetEvent)parameters[2];// 尝试连接端口try{using (TcpClient client = new TcpClient()){client.Connect(ip, port);Console.WriteLine("Port {0} is open on host {1}.", port, ip);}}catch (Exception){// 端口未打开}// 通知主线程完成handle.Set();}static IPAddress GetSubnetAddress(IPAddress address, IPAddress subnetMask){byte[] addressBytes = address.GetAddressBytes();byte[] maskBytes = subnetMask.GetAddressBytes();byte[] subnetBytes = new byte[4];for (int i = 0; i < 4; i++){subnetBytes[i] = (byte)(addressBytes[i] & maskBytes[i]);}return new IPAddress(subnetBytes);}static IPAddress GetBroadcastAddress(IPAddress address, IPAddress subnetMask){byte[] addressBytes = address.GetAddressBytes();byte[] maskBytes = subnetMask.GetAddressBytes();byte[] broadcastBytes = new byte[4];for (int i = 0; i < 4; i++){broadcastBytes[i] = (byte)(addressBytes[i] | ~maskBytes[i]);}return new IPAddress(broadcastBytes);}static IPAddress GetIPAddress(IPAddress subnetAddress, int host){byte[] subnetBytes = subnetAddress.GetAddressBytes();byte[] hostBytes = new byte[4];hostBytes[3] = (byte)host;byte[] ipBytes = new byte[4];for (int i = 0; i < 4; i++){ipBytes[i] = (byte)(subnetBytes[i] | hostBytes[i]);}return new IPAddress(ipBytes);}}
}

上述代码实现了一个简单的多线程局域网扫描器,支持 Ping 主机和扫描主机端口,并输出扫描结果。需要注意的是,在实际应用中,可能需要对输入进行严格的验证和过滤,以确保系统安全。

同时,在使用多线程和异步 I/O 操作时,也需要注意程序的正确性和健壮性。如果不正确地使用这些技术,可能会导致程序出现各种问题,例如竞态条件和死锁。因此,在使用这些技术时,请务必小心并仔细测试程序。

要解决错误“WaitHandles的数量必须小于或等于64”,需要将句柄列表拆分为更小的块,并使用WaitAll分别等待每个块。例如,你可以将句柄列表分成4个块,每个块25个句柄,然后分别等待每个块:

List<WaitHandle>[] handleChunks = new List<WaitHandle>[4];
for (int i = 0; i < handleChunks.Length; i++)
{handleChunks[i] = new List<WaitHandle>();
}
for (int i = 1; i <= 254; i++)
{// ...int chunkIndex = (i - 1) % handleChunks.Length;handleChunks[chunkIndex].Add(new ManualResetEvent(false));ThreadPool.QueueUserWorkItem(PingHost, new object[] { ip, handleChunks[chunkIndex].Last() });
}
for (int i = 0; i < handleChunks.Length; i++)
{WaitHandle.WaitAll(handleChunks[i].ToArray());
}
http://www.hkea.cn/news/677301/

相关文章:

  • 国人在线做网站推广图片大全
  • 郑州网站建设七彩科技四年级说新闻2023
  • 在什么网站上做自媒体seo整站怎么优化
  • 网站开发要注意安全性公司优化是什么意思
  • 河北邢台做移动网站开通网站需要多少钱
  • 天河网站建设多少钱淘宝关键词优化
  • 中型网站 收益关键词排名查询官网
  • 网站的弹窗是怎么做的谈谈对seo的理解
  • 广州网站制作费用宁波seo外包哪个品牌好
  • 河南高端网站建设广州网站优化页面
  • 企业可以备案几个网站南昌seo实用技巧
  • 网站用什么布局专业网站建设公司
  • 公司网站怎么做分录it培训机构学费一般多少
  • 如何将自己做的网页做成网站绍兴seo
  • 河南省住房与城乡建设厅网站首页怎么做属于自己的网站
  • 移动端网站开发推广效果最好的平台
  • 用二级页面做网站的源代码自助建站系统破解版
  • 网站上怎么做动画广告推广策略包括哪些内容
  • 广州网站优化公司大亚湾发布
  • 广州网站开发招聘百度经验悬赏令
  • 吴江建设局网站郑州粒米seo外包
  • 建设工程合同纠纷与劳务合同纠纷seo培训教程视频
  • 找网站建设公司哪家最好沈阳市网站
  • sh域名做的好的网站什么是营销
  • 网站平台怎么做推广一站式网络推广服务
  • 百度对新网站排名问题兰州seo快速优化报价
  • 网站建设常用代码湘潭网络推广
  • 做网站上传图片一直错误好用搜索引擎排名
  • 钟祥网站建设网络推广的含义
  • 新闻类网站源码青岛官网seo