C#掃描IP中關於IP地址合法性,數字字元互轉函數

來源:互聯網
上載者:User

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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.