介绍
Switcher:一个多功能的端口转发工具,支持转发本地或远程地址的端口,支持正则表达式转发(实现端口复用)。
- 简单修改了一下,实现了已存在端口的监听(原只支持新建监听端口)
- 新增自动创建socks5代理
Config示例配置
{
"log_level": "debug",
"socks5_listen": "",
"rules": [
{
"name": "普通模式示例",
"listen": "0.0.0.0:1234",
"blacklist":{
"1.2.3.4":true,
"114.114.114.114":true
},
"targets": [
{
"address": "127.0.0.1:80"
}
]
},
{
"name": "正则模式示例",
"listen": "0.0.0.0:5555",
"enable_regexp": true,
"first_packet_timeout": 5000,
"blacklist":{
"1.2.3.4":true,
"114.114.114.114":true
},
"targets": [
{
"regexp": "^(GET|POST|HEAD|DELETE|PUT|CONNECT|OPTIONS|TRACE)",
"address": "127.0.0.1:80"
},
{
"regexp": "^SSH",
"address": "123.123.123.123:22"
}
]
}
]
}
字段解释
主结构
- log_level代表日志等级,有info/debug/error可以选
- rules是规则配置数组,看下面
规则配置
- name是这个规则的名字,为了在日志中区分不同规则,建议取不同的名字
- listen是这个规则监听的地址,0.0.0.0:1234代表监听所有网卡的1234端口
- enable_regexp为是否开启正则表达式模式,后面有解释
- first_packet_timeout为等待客户端第一个数据包的超时时间(毫秒),仅开启正则表达式模式后有效,后面有解释
- blacklist为黑名单IP,在黑名单里面的IP且为true的时候则直接断开链接。如不需要使用黑名单可留null
- targets为目标配置数组,看下面
目标配置
目标配置有两种模式:普通模式和正则模式。
上面规则配置的enable_regexp为true或false决定了这个目标配置是普通模式还是正则模式。
普通模式,即上面的enable_regexp为false,当存在多个目标的时候,程序会从第一个目标开始尝试连接,如果失败则尝试下一个目标,直到成功为止
正则模式,即上面的enable_regexp为true,程序会根据客户端第一个数据包来匹配正则表达式,匹配成功就转发到指定的目标。 为了防止客户端长时间不发第一个数据包,故可以通过上面的规则配置的first_packet_timeout字段来配置超时时间(毫秒)
目标配置有两个字段:1.regexp字段在正则模式才有用,代表正则表达式。2.address字段代表要转发的目标地址和端口,可以是本地的地址,也可以是远程地址
常见协议正则表达式
协议 | 正则表达式 |
---|---|
HTTP | ^(GET|POST|HEAD|DELETE|PUT|CONNECT|OPTIONS|TRACE) |
SSH | ^SSH |
HTTPS(SSL) | ^\x16\x03 |
RDP | ^\x03\x00\x00 |
SOCKS5 | ^\x05 |
HTTP代理 | (^CONNECT)|(Proxy-Connection:) |
复制到JSON中记得注意特殊符号呀,例如^\x16\x03得改成^\\x16\\x03
演示
这里咱们演示用本地的80端口模拟实战中只有一个端口开放的情况,然后咱们需要使用这个端口进行socks5访问和ssh的复用。
配置规则如下:
{
"log_level": "debug",
"socks5_listen": "192.168.68.1:1080",
"rules": [
{
"name": "socks5&ssh",
"listen": "192.168.68.1:80",
"enable_regexp": true,
"first_packet_timeout": 5000,
"blacklist":{
"114.114.114.114":true
},
"targets": [
{
"regexp": "^\\x05",
"address": "192.168.68.1:1080"
},
{
"regexp": "^SSH",
"address": "192.168.68.134:22"
}
]
}
]
}
socks代理测试
首先开启本地的socks5代理服务,端口为1080,通过配置规则进行端口转发,最后实现用80端口进行访问。
如需开启其他端口,自行修改配置文件中socks5_listen
的值即可
ssh代理
这里配置访问本地192.168.68.1:80端口,然后去访问虚拟机192.168.68.134的ssh服务。
鸣谢
本项目在crabkun师傅的switcher项目上进行修改,感谢crabkun师傅的辛苦开源。
https://github.com/crabkun/switcher
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论