//引用空间
using System.Net;
using System.Threading;
private void button1_Click(object sender, System.EventArgs e)
{
//Thread 类: 创建并控制线程
Thread thScan = new Thread(new ThreadStart(ScanTarget));
//Thread.Start 方法:启动线程
thScan.Start();
}
private void ScanTarget()
{
string strStartIPAddress=this.textBox1.Text+"."+textBox2.Text+"."+textBox3.Text+"."+textBox4.Text;
string strEndIPAddress=this.textBox5.Text+"."+textBox6.Text+"."+textBox7.Text+"."+textBox8.Text;
if(IsValidIP(strStartIPAddress) && IsValidIP(strEndIPAddress) )
{
int intStartIPAddress=ConvertIPAddressToNumber(strStartIPAddress);
int intEndIPAddress=ConvertIPAddressToNumber(strEndIPAddress);
//扫描IP地址总数
int TotalScanNumber = intEndIPAddress-intStartIPAddress;
//扫描的操作
for(int i=0;i<=TotalScanNumber;i++)
{
int intCurrentScanIP=i+intStartIPAddress;
string strCurrentScanIP =ConvertNumberToIPAddress(intCurrentScanIP);
//转换成IP地址
IPAddress myScanIP = IPAddress.Parse(strCurrentScanIP);
try
{
// Dns.GetHostByAddress 方法: 根据IP地址获取 DNS 主机信息。
IPHostEntry myScanHost = Dns.GetHostByAddress(myScanIP);
//获取主机的名
string strHostName =myScanHost.HostName.ToString();
richTextBox1.AppendText("扫描IP:"+strCurrentScanIP+"对应主机:"+strHostName+"/r");
}
catch(Exception error)
{
richTextBox1.AppendText("扫描IP:"+strCurrentScanIP+"失败::"+error.Message+"/r");
}
}
}
else
{
richTextBox1.AppendText("扫描失败:输入IP地址不合法"+"/r");
}
}
private int CountIPNumber(string startIPAddress,string endIPAddress)
{
//判断两个IP地址之间的IP数量
if( IsValidIP(startIPAddress) && IsValidIP(endIPAddress))
{
//IP转换为数字进行比较
string[] maxip_ary=endIPAddress.Split('.');
int tmp_maxip=Convert.ToInt32(maxip_ary[0])*256*256*256+Convert.ToInt32(maxip_ary[1])*256*256+Convert.ToInt32(maxip_ary[2])*256+Convert.ToInt32(maxip_ary[3]);
string[] minip_ary=startIPAddress.Split('.');
int tmp_minip=Convert.ToInt32(minip_ary[0])*256*256*256+Convert.ToInt32(minip_ary[1])*256*256+Convert.ToInt32(minip_ary[2])*256+Convert.ToInt32(minip_ary[3]);
return tmp_maxip - tmp_minip;
}
else
{
return 0;
}
}
private int ConvertIPAddressToNumber(string strIPAddress)
{
//将目标IP地址字符串strIPAddress转换为数字
string[] arrayIP=strIPAddress.Split('.');
int sip1=Int32.Parse(arrayIP[0]);
int sip2=Int32.Parse(arrayIP[1]);
int sip3=Int32.Parse(arrayIP[2]);
int sip4=Int32.Parse(arrayIP[3]);
int tmpIpNumber;
tmpIpNumber=sip1*256*256*256+sip2*256*256+sip3*256+sip4;
return tmpIpNumber;//返回IP地址转换后的数字
}
private string ConvertNumberToIPAddress(int intIPAddress)
{
//将目标整形数字intIPAddress转换为IP地址字符串
//-1062731518192.168.1.2
//-1062731517192.168.1.3
int tempIPAddress=intIPAddress+1;
int s1=tempIPAddress/256/256/256;
int s21=s1*256*256*256;
int s2=(tempIPAddress-s21)/256/256;
int s31=s2*256*256+s21;
int s3=(tempIPAddress-s31)/256;
int s4=tempIPAddress-s3*256-s31;
if(s1<0)
{
s1=255+s1;
s2=255+s2;
s3=255+s3;
s4=255+s4;
}
string strIPAddress=s1.ToString()+"."+s2.ToString()+"."+s3.ToString()+"."+s4.ToString();
return strIPAddress;//返回IP地址字符串
}
//下面的函数是错误的,比如192.168.1.249得出来一个负数
private bool IsValidIP(string strIPAddress)
{
//需要验证的IP地址:strIPAddress
string IPmax = "255.255.255.255"; //允许的最大IP地址范围
string IPmin = "0.0.0.0";//允许的最小IP地址范围
//IP转换为数字进行比较
string[] arrayIP=strIPAddress.Split('.');
int tmp_userip=Convert.ToInt32(arrayIP[0])*256*256*256+Convert.ToInt32(arrayIP[1])*256*256+Convert.ToInt32(arrayIP[2])*256+Convert.ToInt32(arrayIP[3]);
string[] maxip_ary=IPmax.Split('.');
int tmp_maxip=Convert.ToInt32(maxip_ary[0])*256*256*256+Convert.ToInt32(maxip_ary[1])*256*256+Convert.ToInt32(maxip_ary[2])*256+Convert.ToInt32(maxip_ary[3]);
string[] minip_ary=IPmin.Split('.');
int tmp_minip=Convert.ToInt32(minip_ary[0])*256*256*256+Convert.ToInt32(minip_ary[1])*256*256+Convert.ToInt32(minip_ary[2])*256+Convert.ToInt32(minip_ary[3]);
if(tmp_userip <= tmp_maxip && tmp_userip >= tmp_minip)
{
return true;//IP地址是合法的
}
else
{
return false;//IP地址是非法的
}
}
//修正函数为
private static bool IsValidIP(string ip)
{
string[] parts = ip.Split('.');
if (parts.Length != 4) return false;
try
{
if (Byte.Parse(parts[0]) == 0x00)
return false;
foreach (string part in parts)
if (Byte.Parse(part) > 0xFF)
return false;
}
catch(Exception) { return false; }
return true;
}
//校验端口数字合法性
private static bool IsValidPort(string strPort)
{
//需要验证的IP地址:strIPAddress
int maxPort =65535; //允许的最大端口数字
int minPort =0; //允许的最小的端口数字
try
{
int tempPort=Int32.Parse(strPort);
if(tempPort <= maxPort && tempPort >= minPort)
{
return true;//IP地址是合法的
}
else
{
return false;//IP地址是非法的
}
}
catch
{
return false;
}
}
分享到:
相关推荐
基于这些原因,程序中全部使用静态方法,实际上这是由我的另一个C++的程序改写的C#程序,模块的调用很简单,例如,使用当前目录下的CoralWry.dat数据文件来查询IP地址121.193.213.6,则可以: IpLocation ipl=...
DateTime 数字型,字符型转换,。。。穿过代理服务器取远程用户真实IP地址。。。
7.5.1 验证IP地址 182 7.5.2 验证域名 182 7.5.3 验证个人地址 183 7.5.4 验证完整的地址 184 7.6 分析SMTP日志文件 185 7.7 HTML标记 196 7.7.1 从用户输入中清除HTML 197 7.7.2 提取所有HTML标记 198 7.7.3 HTML...
根据指定字段将DataTable转Json字符串 DataTable转Json字符串 DataSet 转 JSON ...在C#后台实现JavaScript的函数escape()的字符串转换(此方法支持汉字 把JavaScript的escape()转换过去的字符串解释回来
只能输入数字:”^[0-9]*$”。 只能输入n位的数字:”^\d{n}$”。 只能输入至少n位的数字:”^\d{n,}$”。 只能输入m~n位的数字:。”^\d{m,n}$” 只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。 只能输入有...
实例181 使用线程扫描局域网ip地址 实例182 使用线程休眠控制图片以百叶窗效果显示 实例183 使用线程控制向窗体中拖放图片并显示 实例184 使用线程制作动画效果的状态栏 实例185 使用线程遍历文件夹 实例186 使用...
73 <br>0106 如何获得一个字符串中数字的长度 74 <br>0107 如何获得字符串中数字或字母的长度 74 <br>0108 如何获得字符串中某个数字的位置 75 <br>0109 获得字符串中汉字的个数 76 <br>0110...
《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...
实例181 使用线程扫描局域网ip地址 345 实例182 使用线程休眠控制图片以百叶窗效果显示 347 实例183 使用线程控制向窗体中拖放图片并显示 349 实例184 使用线程制作动画效果的状态栏 351 实例185 使用线程遍历文件夹...
List转成Json|对象转成Json|集合转成Json|DataSet转成Json|DataTable转成Json|DataReader转成Json等 8.Mime MediaTypes 电子邮件类型帮助类,规定是以Xml,HTML还是文本方式发送邮件 MimeEntity Mime实体帮助类...
/// <param name="ip">IP地址 /// 端口号 /// <returns></returns> public bool TCP_Open(string ip,int point)//连接通信按钮 /// /// 多位读取数据((起点,数量) /// /// 读取起点 /// 读取数量 ///...
VB.net常用字符和日期等函数vb.net读写文件代码vb.net发布水晶报表程序步骤VB.net 查询获取数据库数据信息VB.net读取Word文档属性的方法VB.NET拷贝整个目录下所有子目录及文件的实例代码VB.NET进度条的方法代码asp...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
在字符串中查找指定字符时,可以先将字符串显示在richTextBox 控件中,然后利用richTextBox 类的Find 方法在该控件中查找指定字符。在字符串中查找指定字符的代码如下: 第19章 加密与解密技术 833 M_int_index = ...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...
案例3 判断主机IP合法性算法 案例4 欧几里德最大公因子算法 案例5 字符串的加密算法 案例6 随机生成新身份证算法 案例7 利用ListBox控件实现数据源字段的选择 案例8 利用LislNiew控件实现图标的管理 案例9 利用...