<li id="c4loq"><acronym id="c4loq"></acronym></li>

<button id="c4loq"></button>
    <dd id="c4loq"><pre id="c4loq"></pre></dd>

      <th id="c4loq"></th>

        <dd id="c4loq"></dd>

        幫助中心 > 安全 > 高防IP > 常見問題 > 非網站防護TCP協議如何獲取用戶真實IP

        非網站防護TCP協議如何獲取用戶真實IP

        非網站防護TCP協議如何獲取用戶真實IP

        Proxy protocol 協議流程

        1.設置proxy protocol 開啟

        當前高防IP使用的為proxy_protocol 的V1版本

        使用nginx 轉發的請參考如下配置

        server {
            listen 8443  ssl proxy_protocol default;
            server_name
            $host
           ;
        
           ssl on;
           ssl_certificate     "/usr/local/nginx/conf/keys/52os.net.crt";
           ssl_certificate_key "/usr/local/nginx/conf/keys/52os.net.key";
        
        location / {
                proxy_pass http://backend.example2.com:8088;
                proxy_set_header X-Forwarded-For $proxy_protocol_addr;
            }
        }
        獲取真實ip

        如果設置成功,拿$proxy_protocol_addr 變量

        3.使用自建TCP服務器獲取真實ip

        1. 在三次握手后,數據接收階段獲取的報文中.會首先收到一個字符串,如("PROXY TCP4 119.188.212.127 123.129.229.123 41774 8082").
        2. 其中以空格為分隔符,119.188.212.127 為客戶端的真實IP,123.129.229.123 為高防ip,8082 為端口
        3. 實現代碼(PHP swoole版本):
        on("Connect", function ($server, $fd) {
            echo "Client: Connect.\n";
        });
        
        //監聽數據接收事件
        $server->on("Receive", function ($server, $fd, $from_id, $data) {
           $fd_info = $server->getClientInfo($fd);
        //var_dump($fd_info);
        var_dump($data);
        $is_proxy = substr($data,0,5);
        if($is_proxy == "PROXY"){
            $proxy_arr = explode(" ",$data);
            echo "真實ip:".$proxy_arr[2]."\n";
            echo "高防ip:".$proxy_arr[3]."\n";
        
        }
            $server->send($fd, "Server: " . $data);
        });
        
        //監聽連接關閉事件
        $server->on("Close", function ($server, $fd) {
            echo "Client: Close.\n";
        });
        
        //啟動服務器
        $server->start();
        
        ?>

        實現代碼(Nodejs版本)

        1. 到github下載對應的庫 https://github.com/moznion/proxy-protocol-js

        也可以npm proxy-protocol-js

        服務器解析(高防IP使用V1版本的 代理協議)
        V1 protocol

        var net = require('net');
        const proxyProtocol = require('proxy-protocol-js');
        
        const PORT = 18001;
        const HOST = '0.0.0.0';
        
        var clientHandler = function(socket){
        
            //客戶端發送數據的時候觸發data事件
          socket.on('data', function dataHandler(data) {//data是客戶端發送給服務器的數據
        
        
            var is_proxy = data.toString().substring(0,5);
        
            if(is_proxy == "PROXY"){
              const proto = proxyProtocol.V1ProxyProtocol.parse(data.toString());
              console.log(proto);
            }else{
              console.log(socket.remoteAddress, socket.remotePort, 'send', data.toString());
            }
        
                //服務器向客戶端發送消息
            socket.write('server received\n');
          });
        
            //當對方的連接斷開以后的事件
          socket.on('close', function(){
            console.log(socket.remoteAddress, socket.remotePort, 'disconnected');
          })
        };
        
        //創建TCP服務器的實例
        //傳入的參數是:監聽函數clientHandler
        var app = net.createServer(clientHandler);
        
        app.listen(PORT, HOST);
        console.log('tcp server running on tcp://', HOST, ':', PORT);
        

        測試結果
        使用telnet 高防IP 填寫的轉發端口

        參考文檔

        https://www.cnblogs.com/zhangmingda/p/12672588.html

        黄片免费无马赛克

        <li id="c4loq"><acronym id="c4loq"></acronym></li>

        <button id="c4loq"></button>
        <dd id="c4loq"><pre id="c4loq"></pre></dd>

          <th id="c4loq"></th>

            <dd id="c4loq"></dd>