2017-09-20 64 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