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地址字符串 
   //-1062731518 192.168.1.2
   //-1062731517 192.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;
   }
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疾风铸境

提供工作中碰到的和研究过的技术

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值