V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ysz1121
V2EX  ›  程序员

如何通过 openresty lua 代理发送 tcp 请求

  •  
  •   ysz1121 · 2016-10-14 18:50:27 +08:00 · 3192 次点击
    这是一个创建于 2764 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如何通过 openresty lua 代理发送 tcp 请求

    如题目: 正常咱们使用 socket:tcp 创建请示 然后 connect(host, port)

    普通连接代码如下:

    -- check.lua
    
    local portHandler = function(premature, ip_address, port)
        local sock = ngx.socket.tcp()
        sock:settimeout(300)
        local ok, err = sock:connect(ip_address, port)
    
        if ok then
            --        数据库处理或文件处理写入历史
            local ok, err = ngx.timer.at(1, handler, ip_address, port);
            if not ok then
                ngx.log(ngx.ERR, "failed to create timer: ", err)
            end
        else
            ngx.log(ngx.ERR, "port_handler_error: " .. ip_address, err)
        end
        sock:close()
    end
    

    以上方法在没有任何限制的情况下是可以使用的。

    当如果内网有限制,比如需要访问外网就必须得使用代理的时候,此时运维给了一个可用的代理 ip 、端口及用户名密码,运维称使用的是 ss5 。那么现在我要如何通过他给的代理把 tcp 请求发出去?

    4 条回复    2016-10-17 10:55:20 +08:00
    jigloo
        1
    jigloo  
       2016-10-14 18:52:44 +08:00
    ysz1121
        2
    ysz1121  
    OP
       2016-10-14 18:56:14 +08:00
    @jigloo 有具体实例吗?感觉那个还是没到点上。我要怎么通过代理发送 tcp 请求?
    mengskysama
        3
    mengskysama  
       2016-10-15 00:04:05 +08:00
    楼上那个封装成了 http ,连接函数是 ATYP=3 类型的,你得稍微改改。 socks5 协议很简单,可以参照 rfc1928 改几行。还有就是这种功能为啥不用 kafka 至少也是 redis
    ysz1121
        4
    ysz1121  
    OP
       2016-10-17 10:55:20 +08:00
    @mengskysama 唉…… 现在运维限制的特别严,啥都不能干。有具体实例吗?着急用呢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1357 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 17:38 · PVG 01:38 · LAX 10:38 · JFK 13:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.