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

2016-10-14 18:50:27 +08:00
 ysz1121

如何通过 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 请求发出去?

3245 次点击
所在节点    程序员
4 条回复
ldbC5uTBj11yaeh5
2016-10-14 18:52:44 +08:00
ysz1121
2016-10-14 18:56:14 +08:00
@jigloo 有具体实例吗?感觉那个还是没到点上。我要怎么通过代理发送 tcp 请求?
mengskysama
2016-10-15 00:04:05 +08:00
楼上那个封装成了 http ,连接函数是 ATYP=3 类型的,你得稍微改改。 socks5 协议很简单,可以参照 rfc1928 改几行。还有就是这种功能为啥不用 kafka 至少也是 redis
ysz1121
2016-10-17 10:55:20 +08:00
@mengskysama 唉…… 现在运维限制的特别严,啥都不能干。有具体实例吗?着急用呢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/312860

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX