【问题标题】:get user IP in c#在c#中获取用户IP
【发布时间】:2012-01-30 09:04:00
【问题描述】:

我想获取用户 IP 并将其插入表格中。我正在使用以下内容:

SqlCommand cmd = new SqlCommand("INSERT INTO Raspunsuri Values(@raspuns,@cnp,@data,'1',@ip)", con);
cmd.Parameters.AddWithValue("@cnp", Session["sesiune_cnp"]);
cmd.Parameters.AddWithValue("@raspuns", textbox1.Text);
cmd.Parameters.AddWithValue("@data", DateTime.Now.ToLocalTime());
cmd.Parameters.AddWithValue("@ip", HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);

但是当我查看 Ip 列的表格时,我只得到 1...你能给我解释一下吗?

【问题讨论】:

  • client ip address 的可能重复项
  • Windows 窗体? WCF?网络表单? ...什么?
  • 您已经安装了 IPv6,并从同一台机器本地访问 Web 服务器,因此地址为 ::1?..
  • 您的问题是获取 IP 还是保存问题?打印到控制台
  • 您确定 IP 是表中的最后(共 5 个)列吗?您可能需要明确指定列名。

标签: c#


【解决方案1】:

你可以使用:

string ipAddress = Request.UserHostAddress;

【讨论】:

    【解决方案2】:

    您的程序可能运行正常。 ::1 是 IPv6 中的本地 IP 地址。如果您在 Windows Vista 或更高版本的本地计算机上运行此程序,则一切正常。

    不过,这是获取用户 IP 地址的更好方法:

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

    如果用户使用某种类型的代理,那么您将获得代理地址而不是最终用户的 IP 地址。 HTTP_X_FORWARDED_FOR 通常是用户的真实 IP 地址。如果那是空的,那么你应该在REMOTE_ADDR

    【讨论】:

    • 如果假设其他计算机上的其他人将访问我的应用程序,它将获得他的 IP?
    猜你喜欢
    • 2020-10-14
    • 2013-10-17
    • 2015-11-17
    • 2011-09-03
    • 2012-06-06
    • 2011-12-05
    • 1970-01-01
    • 2014-09-27
    • 2016-10-07
    相关资源
    最近更新 更多