2011-05-02 133 views
0

我想使用C#,我使用的DNS類的方法來獲得這些我aspx頁面上獲得主機的IP地址獲取ip地址。從主機名

它能正常工作本地,但是當我部署在IIS7的解決方案只返回由ISP分配的IP地址,但我想那臺機器的本地IP地址。

有什麼建議嗎?

+0

本地IP地址是指機器有一個局域網一樣192.168.xxx.xxx – Ehtsham 2011-05-02 07:35:29

+0

所以'HTTP_X_FORWARDED_FOR'穆罕默德阿赫塔爾建議是你最好的選擇地址。 – 2011-05-02 07:55:21

回答

0

我相當有信心,你不能得到本地機器的本地192.168.C.D地址這樣的。

這是因爲安全性和可視性(NAT的等)。

如果您正在尋找唯一標識一個用戶。我會看看會話或cookie。

0

當在公共DNS查找IP地址,你會得到向外傳達的officiall IP地址。如果使用NAT,並且您希望內部地址必須連接到包含內部IP地址的DNS服務器。

0

您可以使用此方法...

public static String GetIP() 
{ 
    String ip = HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"]; 

    if(string.IsNullOrEmpty(ip)) 
    { 
     ip = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; 
    } 

    return ip; 
} 
+0

這是最接近你的解決方案,但它不能保證它能工作。中間路由器可以設置HTTP_X_FORWARDED_FOR變量中的任何IP。 – 2011-05-02 07:31:17

+0

這是針對服務器機器ip的,我想要在局域網上獲得任何機器的ip。 – Ehtsham 2011-05-02 09:24:47

+0

這將返回客戶端IP,你可以試試。 – 2011-05-02 09:25:52

1

以下是此例。 在這個例子中,我們可以得到我們給定主機名的IP地址。

string strHostName = "www.microsoft.com"; 
    // Get DNS entry of specified host name 
    IPAddress[] addresses = Dns.GetHostEntry(strHostName).AddressList; 

    // The DNS entry may contains more than one IP addresses. 
    // Iterate them and display each along with the type of address (AddressFamily). 
    foreach (IPAddress address in addresses) 
    { 
     Response.Write(string.Format("{0} = {1} ({2})", strHostName, address, address.AddressFamily)); 
     Response.Write("<br/><br/>"); 
    } 
+3

請注意,版主和其他用戶正在刪除您的垃圾鏈接到您自己的網站中的答案。請停止包括他們,以避免對這些鏈接進行更嚴厲的制裁。 – 2012-11-05 14:47:27