的傳出IP我有,我必須得到IP信息,並把它推到一些偏遠的服務器高速緩存控制檯應用程序。如何識別機器
如果我的機器有多個以太網接口卡,然後正常實施,將返回所有IP的,無論是內因和外部之一。我只需要從中流出的IP。有沒有什麼辦法可以識別這個,而不需要使用c#調用任何網站?
的傳出IP我有,我必須得到IP信息,並把它推到一些偏遠的服務器高速緩存控制檯應用程序。如何識別機器
如果我的機器有多個以太網接口卡,然後正常實施,將返回所有IP的,無論是內因和外部之一。我只需要從中流出的IP。有沒有什麼辦法可以識別這個,而不需要使用c#調用任何網站?
在這裏你去:
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`
如果您只有一個活動的外部IP地址(可能還有多個內部地址),則只需過濾reserved IP addresses上的IP地址列表即可。剩餘地址是用於傳出(例如WAN/Internet)通信的地址。
使用服務 – i486