Tôi có một số mã trong một ứng dụng asp.net mà needsto có được địa chỉ ipv4 của máy khách (người dùng là tất cả trên mạng riêng của chúng tôi). Gần đây, chúng tôi đã nâng cấp máy chủ ứng dụng chạy trên máy chủ Windows 2008. Bây giờ mã Request.UserHostAddress trả về ipv4 khi máy khách đang ở trên một hệ điều hành cũ và ipv6 khi họ đang ở trên một hệ điều hành mới hơn (Vista và cao hơn). Vì vậy, tính năng dựa trên công việc này cho một số khách hàng chứ không phải cho những người khác.Vấn đề Chuyển đổi ipv6 thành ipv4
Tôi đã thêm mã được cho là chuyển đổi từ ipv6 thành ipv4 để cố khắc phục sự cố này. Đó là từ hướng dẫn trực tuyến này: http://www.4guysfromrolla.com/articles/071807-1.aspx .I'm sử dụng dsn.GetHostAddress và sau đó lặp qua IP trả về có tìm kiếm một trong đó là "Internetwork"
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;
Vấn đề là điều này không làm việc cho tôi. Các khách hàng kết nối từ ipv4 tiếp tục trả lại IP ip4 chính xác của máy khách, nhưng các máy khách kết nối từ Vista và Windows 7 nó sẽ trả lại IP ip4 của máy SERVER không phải máy khách.
Tôi đã nhìn thấy mã mẫu này được lặp lại trên nhiều blog. Tôi ngạc nhiên vì nó quá sai .. phần 1, lấy địa chỉ IP của khách hàng. Nếu không thành công, hãy trả lại địa chỉ IP của máy chủ. wtf?!? –
Đúng, chỉ tìm thấy ví dụ tương tự ở đây: http://www.4guysfromrolla.com/articles/071807-1.aspx. Nếu không có gì khác, bằng cách sử dụng 'ToString()' để kiểm tra sự bình đẳng enum trông giống như nó được viết bởi một tổng newbie .NET. – Groo