测试积点老人 发表于 2020-2-20 13:22:27

Web Api接口如何获取访问站点的IP?

Web Api接口如何获取访问站点的IP?
前提:我写了一个获取随机图片的webapi接口,然后嵌入到我的网站当做背景图。
接口里面做了访问IP限制,获取访问者的IP地址,想要实现仅供某个站点访问,即白名单。获取代码如下:
public static string GetClientIp()
      {
         
         String clientIP = "";
            if (System.Web.HttpContext.Current != null)
            {
                clientIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"];
                if (string.IsNullOrEmpty(clientIP) || (clientIP.ToLower() == "unknown"))
                {
                  clientIP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_REAL_IP"];
                  if (string.IsNullOrEmpty(clientIP))
                  {
                        clientIP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"];
                  }
                }
                else
                {
                  clientIP = clientIP.Split(',');
                }
            }
            Match mc = Regex.Matches(clientIP, "((?:(?:25|2\\d|((1\\d{2})|(?\\d)))\\.){3}(?:25|2\\d|((1\\d{2})|(?\\d))))");
            return mc.Groups.Value.ToString();
      }

然后我做了访问测试,发现访问我的网站时,该接口获取到的IP是我当前电脑的IP地址(例如 119.2.154.145),而不是我的网站的IP地址(例如119.3.122.158)。因为这方便内容接触的比较少,就比较不能理解这个问题,请问大家我应该怎么操作,才能获取到是从哪个网站调用的我的API接口的呢?即我想获取嵌入了我接口的站点IP而不是当前访问站点的客户端IP。

jianxiaoyao 发表于 2020-2-20 16:27:39

没明白你的意思,你这么写肯定是获取的调用你接口的IP地址,肯定都是访问者的IP啊。如果多你想获取的是哪个后端把你的接口拿去直接用,想获取这个后端服务器的IP地址,那你直接写个String address = InetAddress.getLocalHost().getHostAddress();获取本机IP地址不就行了,然后再把本机地址通过接口传给你自己的服务器。既然他已经嵌入到自己的后端服务器了那这个服务器的本机地址不就是你想要的?那既然别人都嵌入到自己的代码里了,你获取本机地址又有什么用呢?开放会员?不给会员不让用你的代码?

bellas 发表于 2020-2-21 10:02:41

不清楚哦

litingting0214 发表于 2020-2-21 10:28:10

进来学习一下

jingzizx 发表于 2020-2-21 12:32:07

查看访问者的
页: [1]
查看完整版本: Web Api接口如何获取访问站点的IP?