easyswoole获取用户ip地址

主要思路:
从连接信息中获取ip,如连接信息中获取的ip地址为127.0.0.1,可以从header的x-real-ip、x-forwarded-ip中获取ip地址
代码实现

protected function getClientIp($headerName = 'x-real-ip')
    {
        $server = ServerManager::getInstance()->getSwooleServer();
        $client =$server->getClientInfo($this->request()->getSwooleRequest()->fd);
        
        $clientAddress =$client['remote_ip'];
        $xri =$this->request()->getHeader($headerName);
        $xff =$this->request()->getHeader('x-forwarded-for');

        if($clientAddress === '127.0.0.1')
        {
            if (!empty($xri))
            {
                $clientAddress = $xri[0];
            }
            elseif(!empty($xff))
            {
                $list =explode(',', $xff[0]);
                if (isset($list[0]))
                    $clientAddress = $list[0];
            }

        }
        return $clientAddress;
    }

方法getClientInfo( )的返回值

Array
 (
       [server_port] => 监听端口
       [server_fd] => 监听端口socker
       [socket_fd] => 
       [socket_type] => socket类型
       [remote_port] => 客户端 端口
       [remote_ip] => 客户端ip
       [reactor_id] => Reactor 线程
       [connect_time] => 客户端连接到 Server 的时间
       [last_time] => 最后一次收到数据的时间
       [close_errno] => 关闭连接的错误码
   )

x-forwarded-for 与 x-real-ip 的区别
x-forwarded-for 记录代理信息,没经过一次代理,就会把代理ip记录在此,每个ip以 , 分隔开来。

你可能感兴趣的:(笔记,tcp/ip,网络,服务器)