|
工具简介
port_reuse是用golang实现的windows and linux 端口复用工具,主要是在项目中遇到以下问题时使用(以均不出网得场景下):
外网打点遇到内网不出网,代理慢的一批,不管是rdp、ssh还是http等连接均卡得不行。
内网环境遇到强隔离,双方只有个别端口能通无法做二层代理。使用Neo-reGeorg代理又太慢,尤其是正向加正向代理。
我的解决思路是遇到jsp还好可以使用suo5(新版已支持.NET),遇到别的语言确实只能使用Neo-reGeorg。在网上也看到了端口分流的工具,但是依赖于防火墙进行流量转发,所以就衍生了以下工具。
https://github.com/zema1/suo5
工具实现
首先来看代码我们可以通过"golang.org/x/sys/windows"库来指定SO_REUSEADDR。
var lc = net.ListenConfig{
Control: func(network, address string, c syscall.RawConn) error {
var opErr error
if err := c.Control(func(fd uintptr) {
opErr = windows.SetsockoptInt(windows.Handle(fd), windows.SOL_SOCKET, windows.SO_REUSEADDR, 1)
}); err != nil {
return err
}
return opErr
},
}
接着我们直接监听,运行测试以下
l, err := lc.Listen(context.Background(), "tcp", laddr)
我们可以看出以上不同的进程来监听同一个程序。那么端口复用到底又什么用的。我们可以进行以下实验。
首先我们80端口启动一个web服务,来模拟实战环境下内网不出网,同时只能访问web端口的情况。
我们通过mstsc来连接80端口,正常情况下是肯定连接不通的。
当我们开启端口复用的时候同时来复用3389端口来看看。可以看出我们通过连接192.168.255.128:80也能跟3389建立连接。
同时也不影响web端口的正常服务使用
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|