安全矩阵

 找回密码
 立即注册
搜索
查看: 860|回复: 0

Windows/Linux端口复用工具

[复制链接]

26

主题

26

帖子

88

积分

注册会员

Rank: 2

积分
88
发表于 2024-4-7 16:14:43 | 显示全部楼层 |阅读模式
工具简介

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
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-11-27 21:05 , Processed in 0.012689 second(s), 19 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表