私は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 /インターネット)トラフィックに使用されるアドレスである。
利用サービス – i486