获取客户端机器的IP地址

17

我正在尝试使用C#获取客户端机器的IP地址。 我正在使用以下代码获取IP地址:

string IPAddress = HttpContext.Current.Request.UserHostAddress;

但是它以编码格式返回响应,即fe80 :: ed13:dee2:127e:1264%13

我该如何获取实际的IP地址?有人遇到过这个问题,请分享一些想法。


5
对我来说,你的例子实际上看起来像一个真正的 IP 地址(虽然是 IPv6,而不是 IPv4)。 - Uwe Keim
3
那不是编码结果,而是IPv6而不是IPv4。 - The Hungry Dictator
是的,它正在提供IPv6地址。有没有办法可以获取IPv4地址? - Sushri
@Sushri,你能帮我检查一下我的答案吗?它是有效的,你可以自己试试看。 - Amarnath Balasubramanian
您可以按照所述方法获取正确的IP地址。请尝试此答案。点击这里 - Zia Ul Mustafa
完全被接受的答案和其他投票搞糊涂了。问题是在询问_CLIENT_机器IPv4地址,但所有答案(除了Ramashankar的答案)都获取服务器的IPv4地址。 - decates
4个回答

16

C#

string IPAddress = GetIPAddress();

public string GetIPAddress()
{
    IPHostEntry Host = default(IPHostEntry);
    string Hostname = null;
    Hostname = System.Environment.MachineName;
    Host = Dns.GetHostEntry(Hostname);
    foreach (IPAddress IP in Host.AddressList) {
        if (IP.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) {
            IPAddress = Convert.ToString(IP);
        }
    }
    return IPAddress;
}

VB.net

Dim Host As IPHostEntry
Dim Hostname As String
Hostname = My.Computer.Name
Host = Dns.GetHostEntry(Hostname)
For Each IP As IPAddress In Host.AddressList
    If IP.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork Then
        IPAddress = Convert.ToString(IP)
    End If
    Next
Return IPAddress

希望这可以帮到你。

感谢您的时间,Amarnath。但我在这一行遇到了一些问题:Hostname = My.Computer.Name; 是否还有其他依赖关系? - Sushri
My.Computer.Name未被识别。 我们需要在代码中添加其他内容吗? - Sushri
2
@Sushri 我已经更新了我的答案 Hostname = System.Environment.MachineName; - Amarnath Balasubramanian
18
这里返回的是服务器的 IP 地址,而不是问题所要求的客户端的IP地址。原帖作者试图从当前的“HttpContext”中获取IP地址,但你却从服务器获取了它。这并没有回答问题(尽管它可能很好地回答了另一个问题!)。 - decates

10
private string GetUserIP()
 {
     return Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? Request.ServerVariables["REMOTE_ADDR"];    
 }

您可能会获得多个IP地址,因此可以将它们拆分为-

private string GetUserIP()
    {
        string ipList = Request.ServerVariables["HTTP_X_FORWARDED_FOR"];

        if (!string.IsNullOrEmpty(ipList))
        {
            return ipList.Split(',')[0];
        }

        return Request.ServerVariables["REMOTE_ADDR"];
    }

请注意:HTTP_X_FORWARDED_FOR头部可能包含由逗号分隔的多个IP。通常,正确的IP是最后一个。这是因为代理添加了它们自己的IP到“链”中。 - Pascal Mathys
不错。这似乎是唯一一个真正回答了问题的答案:获取当前请求的客户端地址(而不是服务器地址)。 - decates

7

尝试使用这个

string ip=System.Net.Dns.GetHostEntry
               (System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();

谢谢Ronit...这段代码用于获取IPv6地址,我稍作修改以获取IPv4地址。获取IPv4地址的代码如下:string ip=System.Net.Dns.GetHostEntry (System.Net.Dns.GetHostName()).AddressList.GetValue(1).ToString(); - Sushri

6

在我的项目中需要获取本地计算机IP地址。所以我使用了以下代码:

请尝试下面的代码
string strHostName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
string ip = addr[1].ToString();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接