2011-05-02 96 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