2017-09-20 62 views
0

的傳出IP我有,我必須得到IP信息,並把它推到一些偏遠的服務器高速緩存控制檯應用程序。如何識別機器

如果我的機器有多個以太網接口卡,然後正常實施,將返回所有IP的,無論是內因和外部之一。我只需要從中流出的IP。有沒有什麼辦法可以識別這個,而不需要使用c#調用任何網站?

+0

使用服務 – i486

回答

2

在這裏你去:

private IPAddress GetExternalIPAddress() 
{ 
    IPHostEntry myIPHostEntry = Dns.GetHostEntry(Dns.GetHostName()); 

    foreach (IPAddress myIPAddress in myIPHostEntry.AddressList) 
    { 
     byte[] ipBytes = myIPAddress.GetAddressBytes(); 

     if(myIPAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
     { 
      if (!IsPrivateIP(myIPAddress)) 
      { 
       return myIPAddress; 
      } 
     } 
    } 

    return null; 
} 


private bool IsPrivateIP(IPAddress myIPAddress) 
{ 
    if (myIPAddress.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) 
    { 
     byte[] ipBytes = myIPAddress.GetAddressBytes(); 

     // 10.0.0.0/24 
     if (ipBytes[0] == 10) 
     { 
      return true; 
     } 
     // 172.16.0.0/16 
     else if (ipBytes[0] == 172 && ipBytes[1] == 16) 
     { 
      return true; 
     } 
     // 192.168.0.0/16 
     else if (ipBytes[0] == 192 && ipBytes[1] == 168) 
     { 
      return true; 
     } 
     // 169.254.0.0/16 
     else if (ipBytes[0] == 169 && ipBytes[1] == 254) 
     { 
      return true; 
     } 
    } 

    return false; 
} 


private bool CompareIpAddress(IPAddress IPAddress1, IPAddress IPAddress2) 
{ 
    byte[] b1 = IPAddress1.GetAddressBytes(); 
    byte[] b2 = IPAddress2.GetAddressBytes(); 

    if (b1.Length == b2.Length) 
    { 
     for (int i = 0; i < b1.Length; ++i) 
     { 
      if (b1[i] != b2[i]) 
      { 
       return false; 
      } 
     } 
    } 
    else 
    { 
     return false; 
    } 

    return true; 
} 

這CSHARP(C#)代碼片斷顯示瞭如何獲得機器的外部IP地址(IPv4)(即撥號連接IP)。爲了達到這個目的,我們得到機器的所有IP地址,並將它們與本地地址範圍(10.0.0.0/24,172.16.0.0/16,192.168.0.0/16和169.254.0.0/16)進行比較。像`ipecho.net`或`ipchicken.com`

Source

0

如果您只有一個活動的外部IP地址(可能還有多個內部地址),則只需過濾reserved IP addresses上的IP地址列表即可。剩餘地址是用於傳出(例如WAN/Internet)通信的地址。

0

如果特定的DNS有一個值,那麼你就可以瞭解它的活動一個 image