zoukankan      html  css  js  c++  java
  • 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;
       }
      }

  • 相关阅读:
    java.net.BindException: Cannot assign requested address: bind
    Caused by: com.fasterxml.jackson.core.JsonParseException: Unrecognized token 'name': was expecting ('true', 'false' or 'null')
    springMVC上传错误StandardMultipartHttpServletRequest
    常用软件
    虚拟机修改静态ip
    linux下脚本做成服务
    Unable to resolve persistence unit root URL
    MyBatis对不同数据库的主键生成策略
    MyBatis定义复合主键
    MongoDB安装,启动,注册为windows系统服务
  • 原文地址:https://www.cnblogs.com/xqf222/p/3306870.html
Copyright © 2011-2022 走看看