我正在尝试使用Go创建(然后关闭)通过SSH转发的简单TCP端口。我是Golang和静态类型语言的新手。 (来自Ruby。)
在终端中,我只需运行
我已经尝试使用该示例作为起点,并且尝试使用最新的测试来理解该怎么做,但是现在看来,这实际上是一件非常简单的事情,所以我有一堆混乱的混乱代码。铅>
任何帮助将不胜感激! :-)
我终于弄清楚了如何做到这一点,我在IRC频道中从schmichael得到了提示。感谢所有人!
编辑:一点解释:
我遇到的问题的很大一部分是,我没有意识到需要设置本地
另外,既有端口转发也有反向端口转发,我以前没有详细考虑过常规端口转发也向后发送字节的事实,因此将远程读取器复制到本地写入器并不是我实现的事情非常需要。
这是尝试将这段代码的本质联系起来的方法:
- 在本地端口9000上侦听。
-
尝试从本地端口9000读取:(
listener.Accept() ), -
接受连接并返回本地
io.Reader 和io.Writer ,然后, - 连接到远程服务器,
-
返回到
io.Reader 和io.Writer ,连接到远程端口9999。 -
连续将本地
io.Reader 字节复制到远程io.Writer , -
连续将远程
io.Reader 字节复制到本地io.Writer 。
这是代码:
我已经使用您的(该死的)示例代码构建了一个小型的开源工具:SSHTunnel
https://github.com/SommerEngineering/SSHTunnel
因此,该代码可在GitHub上免费提供给任何人:请随时用于学习目的或其他目的使用它:)我已经提到了您的昵称,并且也链接到此问题。
最诚挚的问候,
托尔斯滕
我已经完成了一个名为Mallory的简单SSH端口转发工具。
它提供HTTP代理而不是SOCKS代理,这实际上与
核心代码类似于达米克的答案。
Dial initiates a connection to the addr from the remote host. The resulting connection has a zero LocalAddr() and RemoteAddr().
我编写了一个名为gosshtool的工具,使用该工具,您可以使用Go轻松通过SSH创建一个简单的TCP端口。https://github.com/scottkiss/gosshtool
我使用此工具实现了端口转发服务器示例项目:
https://github.com/scottkiss/gooverssh