我有一些asp.net應用程序需要獲取客戶端計算機的ipv4地址(用戶都在我們自己的網絡上)的代碼。最近我們將應用程序運行的服務器升級到了Windows 2008服務器。現在,Request.UserHostAddress代碼在客戶端處於較舊的操作系統時返回ipv4,而在較新的操作系統(Vista及更高版本)時則返回ipv6。因此,依賴於此功能的功能適用於某些客戶而不是其他客戶。問題轉換ipv6到ipv4
我添加了應該從ipv6轉換到ipv4的代碼,試圖解決這個問題。這是從這個在線教程:http://www.4guysfromrolla.com/articles/071807-1.aspx .I'm使用dsn.GetHostAddress,然後循環通過IPS退換尋找一個是「互聯網絡」
foreach (IPAddress IPA in Dns.GetHostAddresses(HttpContext.Current.Request.UserHostAddress))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
if (IP4Address != String.Empty)
{
return IP4Address;
}
foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName()))
{
if (IPA.AddressFamily.ToString() == "InterNetwork")
{
IP4Address = IPA.ToString();
break;
}
}
return IP4Address;
的問題是,這不是爲我工作。從ipv4連接的客戶端繼續返回客戶端計算機的正確ipv4 IP,但從Vista和Windows 7連接的客戶端將返回機器的ipv4 IP而不是客戶端計算機。
我見過許多博客上重複的示例代碼。我很驚訝,因爲它是錯誤的。第1部分,獲取客戶端的IP地址。如果失敗,請返回服務器的IP地址。 WTF?!? – 2010-04-05 16:07:17
是的,剛剛在這裏找到同樣的例子:http://www.4guysfromrolla.com/articles/071807-1.aspx。如果沒有別的,使用'ToString()'來檢查枚舉相等,看起來它是由一個.NET新手編寫的。 – Groo 2010-12-07 16:03:07