2009-03-14 71 views

Trả lời

47

này nên làm việc:

//this gets the ip address of the server pc 

    public string GetIPAddress() 
    { 
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); // `Dns.Resolve()` method is deprecated. 
    IPAddress ipAddress = ipHostInfo.AddressList[0]; 

    return ipAddress.ToString(); 
    } 

http://wec-library.blogspot.com/2008/03/gets-ip-address-of-server-pc-using-c.html

HOẶC

//while this gets the ip address of the visitor making the call 
    HttpContext.Current.Request.UserHostAddress; 

http://www.geekpedia.com/KB32_How-do-I-get-the-visitors-IP-address.html

+4

Hai khối mã này hoàn toàn khác nhau. – Martin

+0

Sự khác biệt là gì? – jergason

+6

Khối mã trên cùng nhận địa chỉ IP của máy chủ mà mã đang chạy. Khối mã dưới cùng nhận địa chỉ IP của khách truy cập thực hiện yêu cầu. – Martin

10

Trên đây là chậm vì nó đòi hỏi một cuộc gọi DNS (và rõ ràng sẽ không hoạt động nếu một là không có sẵn). Bạn có thể sử dụng mã dưới đây để có được bản đồ về địa chỉ IPV4 địa phương pc hiện tại với subnet mask tương ứng của họ:

public static Dictionary<IPAddress, IPAddress> GetAllNetworkInterfaceIpv4Addresses() 
{ 
    var map = new Dictionary<IPAddress, IPAddress>(); 

    foreach (var ni in NetworkInterface.GetAllNetworkInterfaces()) 
    { 
     foreach (var uipi in ni.GetIPProperties().UnicastAddresses) 
     { 
      if (uipi.Address.AddressFamily != AddressFamily.InterNetwork) continue; 

      if (uipi.IPv4Mask == null) continue; //ignore 127.0.0.1 
      map[uipi.Address] = uipi.IPv4Mask; 
     } 
    } 
    return map; 
} 

cảnh báo: đây không phải được thực hiện trong Mono chưa

+0

Và ... với mã này ... làm thế nào để bạn kiểm tra xem máy chủ đang chạy một trang web là gì? Tôi nghĩ rằng ... Tôi có một máy chủ sản xuất và nhân rộng, làm cách nào để lưu trữ ip hoặc ips để kiểm tra đó là máy chủ? –

+0

Tôi nghĩ câu trả lời này đang đi đúng hướng. Máy chủ có thể có nhiều bộ điều hợp mạng và tên máy chủ riêng lẻ có thể cung cấp cho bạn thông tin sai tùy thuộc vào thiết lập máy chủ. Các câu trả lời khác có thể và sẽ hoạt động trong một số trường hợp, nhưng đây là câu trả lời giúp bạn suy nghĩ và hiểu rõ hơn về môi trường của mình. – Nick

6
//this gets the ip address of the server pc 
    public string GetIPAddress() 
    { 
    string strHostName = System.Net.Dns.GetHostName(); 
    //IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName()); <-- Obsolete 
    IPHostEntry ipHostInfo = Dns.GetHostEntry(strHostName); 
    IPAddress ipAddress = ipHostInfo.AddressList[0]; 

    return ipAddress.ToString(); 
    } 
26

Request.ServerVariables["LOCAL_ADDR"];

Điều này cung cấp cho IP yêu cầu đến cho các máy chủ đa homed

+2

Đây cũng là phương pháp hiệu quả và ổn định nhất. Nếu bạn đang sử dụng '' 'System.Net.Dns''' bạn đang làm sai. –

+0

Cụ thể hơn: System.Web.HttpContext.Current.Request.ServerVariables ["LOCAL_ADDR"]; –

1

Điều này sẽ hoạt động cho IPv4 4:

public static string GetServerIP() 
{    
    IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); 

    foreach (IPAddress address in ipHostInfo.AddressList) 
    { 
     if (address.AddressFamily == AddressFamily.InterNetwork) 
      return address.ToString(); 
    } 

    return string.Empty; 
} 
Các vấn đề liên quan