<menu id="u2y6m"></menu>
<tt id="u2y6m"><rt id="u2y6m"></rt></tt>
  • <input id="u2y6m"></input><tt id="u2y6m"><blockquote id="u2y6m"></blockquote></tt>
    <bdo id="u2y6m"><small id="u2y6m"></small></bdo>
  • <blockquote id="u2y6m"><optgroup id="u2y6m"></optgroup></blockquote>
  • 幫助中心 > 安全 > 高防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

    免費撥打  400 100 2938 免費撥打 400 100 2938
    24小時售后技術支持 24小時售后技術支持
    返回頂部 返回頂部
    <menu id="u2y6m"></menu>
    <tt id="u2y6m"><rt id="u2y6m"></rt></tt>
  • <input id="u2y6m"></input><tt id="u2y6m"><blockquote id="u2y6m"></blockquote></tt>
    <bdo id="u2y6m"><small id="u2y6m"></small></bdo>
  • <blockquote id="u2y6m"><optgroup id="u2y6m"></optgroup></blockquote>
  • 一本久道久久综合丁香五月_免费视频禁止18以下禁止观看_日本japanese熟睡人妻_成熟闷骚女邻居引诱2