欢迎莅临
人的生命在于折腾,我喜欢折腾我自己~

PHP & C# 获取客户端IP

正常来说只需要直接执行一段函数即可,但是如果遇到使用CDN等情况,获取到的IP就未必正确了,所以我们还需要一段函数协助我们快速获取客户端IP。

function getip()
{
    static $ip = '';
    $ip = $_SERVER['REMOTE_ADDR'];
    if (isset($_SERVER['HTTP_CDN_SRC_IP'])) {
        $ip = $_SERVER['HTTP_CDN_SRC_IP'];
    } elseif (isset($_SERVER['HTTP_CLIENT_IP']) && preg_match('/^([0-9]{1,3}\.){3}[0-9]{1,3}$/', $_SERVER['HTTP_CLIENT_IP'])) {
        $ip = $_SERVER['HTTP_CLIENT_IP'];
    } elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) and preg_match_all('#\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}#s', $_SERVER['HTTP_X_FORWARDED_FOR'], $matches)) {
        foreach ($matches[0] as $xip) {
            if (!preg_match('#^(10|172\.16|192\.168)\.#', $xip)) {
                $ip = $xip;
                break;
            }
        }
    }
    return $ip;
}

以下是C#代码

    protected string GetIp()
    {
        string loginip = "";
        //Request.ServerVariables[""]--获取服务变量集合 
        if (Request.ServerVariables["REMOTE_ADDR"] != null) //判断发出请求的远程主机的ip地址是否为空
        {
            //获取发出请求的远程主机的Ip地址
            loginip = Request.ServerVariables["REMOTE_ADDR"].ToString();
        }
        //判断登记用户是否使用设置代理
        else if (Request.ServerVariables["HTTP_VIA"] != null)
        {
            if (Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null)
            {
                //获取代理的服务器Ip地址
                loginip = Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString();
            }
            else
            {
                //获取客户端IP
                loginip = Request.UserHostAddress;
            }
        }
        else
        {
            //获取客户端IP
            loginip = Request.UserHostAddress;
        }
        return loginip;
    }
赞(0) 打赏
未经允许不得转载:邓子乐的札记 » PHP & C# 获取客户端IP
0

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏