`
guanhuaing
  • 浏览: 1189261 次
文章分类
社区版块
存档分类
最新评论

C#扫描IP中关于IP地址合法性,数字字符互转函数

 
阅读更多

//引用空间
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;
}
}

分享到:
评论

相关推荐

    纯真IP数据库查询模块源代码参考(C#)

    基于这些原因,程序中全部使用静态方法,实际上这是由我的另一个C++的程序改写的C#程序,模块的调用很简单,例如,使用当前目录下的CoralWry.dat数据文件来查询IP地址121.193.213.6,则可以: IpLocation ipl=...

    C#常用函数和方法(大量实例介绍)

    DateTime 数字型,字符型转换,。。。穿过代理服务器取远程用户真实IP地址。。。

    18.C#字符串和正则表达式参考手册 影印版

    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...

    C#一般数据格式的转换及加密

    根据指定字段将DataTable转Json字符串 DataTable转Json字符串 DataSet 转 JSON ...在C#后台实现JavaScript的函数escape()的字符串转换(此方法支持汉字 把JavaScript的escape()转换过去的字符串解释回来

    C#正则表达式分解和转换IP地址实例(C#正则表达式大全 c#正则表达式语法)

    只能输入数字:”^[0-9]*$”。 只能输入n位的数字:”^\d{n}$”。 只能输入至少n位的数字:”^\d{n,}$”。 只能输入m~n位的数字:。”^\d{m,n}$” 只能输入零和非零开头的数字:”^(0|[1-9][0-9]*)$”。 只能输入有...

    明日科技C#开发入门及项目实战

    实例181 使用线程扫描局域网ip地址 实例182 使用线程休眠控制图片以百叶窗效果显示 实例183 使用线程控制向窗体中拖放图片并显示 实例184 使用线程制作动画效果的状态栏 实例185 使用线程遍历文件夹 实例186 使用...

    C#编程经验技巧宝典

    73 &lt;br&gt;0106 如何获得一个字符串中数字的长度 74 &lt;br&gt;0107 如何获得字符串中数字或字母的长度 74 &lt;br&gt;0108 如何获得字符串中某个数字的位置 75 &lt;br&gt;0109 获得字符串中汉字的个数 76 &lt;br&gt;0110...

    C#全能速查宝典

    《C#全能速查宝典》共分为8章,分别介绍了C#语言基础、Windows窗体及常用控件、Windows高级控件、控件公共属性、方法及事件、数据库开发、文件、数据流与注册表、GDI+绘图技术和C#高级编程,共包含562个C#编程中常用...

    《C#经典编程220例》.(明日科技).【带书签】-共3部分

    实例181 使用线程扫描局域网ip地址 345 实例182 使用线程休眠控制图片以百叶窗效果显示 347 实例183 使用线程控制向窗体中拖放图片并显示 349 实例184 使用线程制作动画效果的状态栏 351 实例185 使用线程遍历文件夹...

    C#基础类库

    List转成Json|对象转成Json|集合转成Json|DataSet转成Json|DataTable转成Json|DataReader转成Json等 8.Mime MediaTypes 电子邮件类型帮助类,规定是以Xml,HTML还是文本方式发送邮件 MimeEntity Mime实体帮助类...

    C#与FX5U PLC通信测试

    /// &lt;param name="ip"&gt;IP地址 /// 端口号 /// &lt;returns&gt;&lt;/returns&gt; public bool TCP_Open(string ip,int point)//连接通信按钮 /// /// 多位读取数据((起点,数量) /// /// 读取起点 /// 读取数量 ///...

    获取客户端IP地址c#/vb.net各自实现代码

    VB.net常用字符和日期等函数vb.net读写文件代码vb.net发布水晶报表程序步骤VB.net 查询获取数据库数据信息VB.net读取Word文档属性的方法VB.NET拷贝整个目录下所有子目录及文件的实例代码VB.NET进度条的方法代码asp...

    C#程序开发范例宝典(第2版).part02

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    c# 加密和解密相关代码

    在字符串中查找指定字符时,可以先将字符串显示在richTextBox 控件中,然后利用richTextBox 类的Find 方法在该控件中查找指定字符。在字符串中查找指定字符的代码如下: 第19章 加密与解密技术 833 M_int_index = ...

    C#程序开发范例宝典(第2版).part08

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    C#程序开发范例宝典(第2版).part12

    实例229 C#中实现文件拖放 317 实例230 文件比较 318 实例231 获取文件夹中的图标资源 319 实例232 获取文件夹下的所有文件夹及文件的名称 321 第7章 操作系统与Windows相关程序 324 7.1 启动相关 325 实例...

    C#设计经典案例设计与实现

    案例3 判断主机IP合法性算法 案例4 欧几里德最大公因子算法 案例5 字符串的加密算法 案例6 随机生成新身份证算法 案例7 利用ListBox控件实现数据源字段的选择 案例8 利用LislNiew控件实现图标的管理 案例9 利用...

Global site tag (gtag.js) - Google Analytics