获取客户端计算机的IP地址

Sus*_*hri 12 c# asp.net ip-address

我试图使用C#获取客户端计算机的IP地址.我使用以下代码获取IP地址:

string IPAddress = HttpContext.Current.Request.UserHostAddress;
Run Code Online (Sandbox Code Playgroud)

但它给了我编码格式的响应,即 fe80::ed13:dee2:127e:1264%13

我怎样才能获得实际的IP地址?任何人都面临这个问题请分享一些想法.

Ama*_*ian 14

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;
}
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助

  • 这将返回服务器的IP地址,而不是问题中询问的客户端的IP地址。OP正在尝试从当前的HttpContext中拉出IP地址,但是您正在从服务器中获取它。这不能回答问题(尽管可以很好地回答另一个问题!)。 (7认同)
  • @Sushri我已经更新了我的答案Hostname = System.Environment.MachineName; (2认同)

Ram*_*kar 8

private string GetUserIP()
 {
     return Request.ServerVariables["HTTP_X_FORWARDED_FOR"] ?? Request.ServerVariables["REMOTE_ADDR"];    
 }
Run Code Online (Sandbox Code Playgroud)

您可能会获得多个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"];
    }
Run Code Online (Sandbox Code Playgroud)


Sap*_*ndu 6

在我的项目中,需要获取本地 PC IP。所以我使用它请尝试下面的代码

string strHostName = System.Net.Dns.GetHostName();
IPHostEntry ipEntry = System.Net.Dns.GetHostEntry(strHostName);
IPAddress[] addr = ipEntry.AddressList;
string ip = addr[1].ToString();
Run Code Online (Sandbox Code Playgroud)


The*_*tor 5

尝试使用这个

string ip=System.Net.Dns.GetHostEntry
               (System.Net.Dns.GetHostName()).AddressList.GetValue(0).ToString();
Run Code Online (Sandbox Code Playgroud)