比如说,A 、B 两台机器不互通,但是 A 、B 都可以访问机器 C 上的 kafka ,那就可以用这个工具,通过 kafka 搭一个桥梁,使得 A 能访问 B 上任意的 TCP 端口。
首先clone本项目到本地,
github地址 GitHub - codingmiao/hppt: 一款可通过任意协议转发tcp端口的工具
gitee地址 hppt: 一款可通过任意协议转发tcp端口的工具
再mvn clean install
把项目安装到maven本地仓库。
然后新建一个java工程,引入hppt-run以及kafka等maven依赖
<dependency>
<groupId>org.wowtools.hppt</groupId>
<artifactId>run</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<!--继续添加其他依赖-->
然后就可以编写代码了:
编写一个服务端实现并在机器B上运行,你需要实现如下方法:
public class ServerDemo extends ServerSessionService<T> {
public ServerDemo(SsConfig ssConfig) {
super(ssConfig);
}
//初始化时需要做什么
public void init(SsConfig ssConfig) throws Exception {
}
//怎样发送字节到客户端
protected void sendBytesToClient(T ctx, byte[] bytes) {
}
//收到客户端的字节时,主动去调用receiveClientBytes(CTX ctx, byte[] bytes)
//当客户端断开时需要做什么
protected void closeCtx(T ctx) throws Exception {
}
//当本服务端关闭后,在此释放掉连接池等资源
protected void doClose() throws Exception {
}
}
完整的示例实现请参考这里
编写一个客户端实现并在机器B上运行,你需要实现如下方法:
public class ClientDemo extends ClientSessionService {
public ClientDemo(ScConfig config) throws Exception {
super(config);
}
//怎样连接到服务端
protected void connectToServer(ScConfig config, Cb cb) throws Exception {
}
//怎样发送字节到服务端
protected void sendBytesToServer(byte[] bytes) {
}
//收到客户端的字节时,主动去调用receiveServerBytes(byte[] bytes)
}
完整的示例实现请参考这里
随后,你就可以通过访问A的10022端口,来连接B上的SSH 22端口了。
总结:本文以kafka为例,介绍了如何通过hppt工具,打通两个无法连通的网络间的TCP连接。
另外,hppt也提供了常用的http、websocket协议支持,无需编写代码即可实现网络打通。
详见: