diff --git a/_doc/demo/hppt.md b/_doc/demo/hppt.md new file mode 100644 index 0000000..ecec653 --- /dev/null +++ b/_doc/demo/hppt.md @@ -0,0 +1,115 @@ +## 示例1 通过http端口,websocket反向代理访问内部服务器SSH端口 + +假设你有一个服务器集群,仅有一个nginx提供了80/443端口对外访问(111.222.33.44:80),你想要访问集群中的应用服务器(192.168.0.2)的22端口,则可以按如下结构部署 + +![示例1](../img/hpptdemo.jpg) + +1、在集群中任一服务器上新建一个hppt目录,并上传hppt.jar(也可用可执行文件 hppt.exe 或 hppt)、ss.yml、log4j2.xml文件到此目录下: + +``` +hppt + - hppt.jar (or hppt.exe or hppt_linux_file) + - ss.yml + - log4j2.xml +``` + +并调整ss.yml的配置信息: + +```yaml +type: hppt +#服务端口 +port: 20871 +# 允许的客户端账号和密码 +clients: + - user: user1 + password: 12345 + - user: user2 + password: 112233 + +``` +(注1:作为快速演示,这里的type选择了最简单的post类型,此场景下最佳性能的协议为websocket,或是有独立端口的话可以配置hppt协议,ws、hppt版的说明奋力码字中。。) + +(注2:实际应用中,为了确保安全,建议把clientId设置得更复杂一些) + +执行如下命令运行服务端的hppt(3选1) + +jar包运行 +```shell +cd hppt +/bin/java -jar hppt.jar ss ss.yml +``` + +windows下可执行文件运行 +```shell +cd hppt +chcp 65001 +hppt.exe ss ss.yml +``` + +linux下可执行文件运行 +```shell +cd hppt +./hppt ss ss.yml +#后台运行用命令 nohup ./hppt ss ss.yml >/dev/null & +``` + +2、自己笔记本上,新建一个hppt目录,拷贝hppt.jar (or hppt.exe or hppt_linux_file)、sc.yml、log4j2.xml文件到此目录下: + +``` +hppt + - hppt.jar (or hppt.exe or hppt_linux_file) + - sc.yml + - log4j2.xml +``` + +并调整sc.yml的配置信息: + +```yaml +# 和服务端的type保持一致 +type: hppt +# 客户端用户名,每个sc进程用一个,不要重复 +clientUser: user1 +# 客户端密码 +clientPassword: 12345 + +hppt: + #服务端地址 + host: "111.222.33.44" + #服务端端口 + port: 20871 +forwards: + # 把192.168.0.2的22端口代理到本机的10022端口 + - localPort: 10022 + remoteHost: "192.168.0.2" + remotePort: 22 + # 同理也可以代理数据库等任意TCP端口,只要服务端的hppt所在服务器能访问到的端口都行 + - localPort: 10023 + remoteHost: "192.168.0.3" + remotePort: 3306 + + +``` + +执行如下命令启动客户端的hppt(3选1) + +jar包运行 +```shell +cd hppt +/bin/java -jar hppt.jar sc sc.yml +``` + +windows下可执行文件运行 +```shell +cd hppt +chcp 65001 +hppt.exe sc sc.yml +``` + +linux下可执行文件运行 +```shell +cd hppt +./hppt sc sc.yml +#后台运行用命令 nohup ./hppt ss ss.yml >/dev/null & +``` + +随后,你就可以在公司用linux连接工具访问localhost的10022端口,来登录应用服务器了 diff --git a/_doc/demo/websocket.md b/_doc/demo/websocket.md new file mode 100644 index 0000000..a8f832f --- /dev/null +++ b/_doc/demo/websocket.md @@ -0,0 +1,138 @@ +## 示例1 通过http端口,websocket反向代理访问内部服务器SSH端口 + +假设你有一个服务器集群,仅有一个nginx提供了80/443端口对外访问(111.222.33.44:80),你想要访问集群中的应用服务器(192.168.0.2)的22端口,则可以按如下结构部署 + +![示例1](../img/3.jpg) + +1、在集群中任一服务器上新建一个hppt目录,并上传hppt.jar(也可用可执行文件 hppt.exe 或 hppt)、ss.yml、log4j2.xml文件到此目录下: + +``` +hppt + - hppt.jar (or hppt.exe or hppt_linux_file) + - ss.yml + - log4j2.xml +``` + +并调整ss.yml的配置信息: + +```yaml +type: websocket +#服务端口 +port: 20871 +# 允许的客户端账号和密码 +clients: + - user: user1 + password: 12345 + - user: user2 + password: 112233 + +``` +(注1:作为快速演示,这里的type选择了最简单的post类型,此场景下最佳性能的协议为websocket,或是有独立端口的话可以配置hppt协议,ws、hppt版的说明奋力码字中。。) + +(注2:实际应用中,为了确保安全,建议把clientId设置得更复杂一些) + +执行如下命令运行服务端的hppt(3选1) + +jar包运行 +```shell +cd hppt +/bin/java -jar hppt.jar ss ss.yml +``` + +windows下可执行文件运行 +```shell +cd hppt +chcp 65001 +hppt.exe ss ss.yml +``` + +linux下可执行文件运行 +```shell +cd hppt +./hppt ss ss.yml +#后台运行用命令 nohup ./hppt ss ss.yml >/dev/null & +``` + + +在nginx上增加一段配置指向hppt + +``` +server { + # 用https也ok的,对应修改nginx https配置即可 + listen 80; + ... + location /aaa/ { + proxy_redirect off; + proxy_pass http://win10:20871/s; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_set_header Host $http_host; + } + + ... +``` + +随后,访问`http://111.222.33.44:80/aaa/` 能看到“not a WebSocket handshake request”字样即证明服务端部署成功。 + +2、自己笔记本上,新建一个hppt目录,拷贝hppt.jar (or hppt.exe or hppt_linux_file)、sc.yml、log4j2.xml文件到此目录下: + +``` +hppt + - hppt.jar + - sc.yml + - log4j2.xml +``` + +并调整sc.yml的配置信息: + +```yaml +# 和服务端的type保持一致 +type: websocket +# 客户端用户名,每个sc进程用一个,不要重复 +clientUser: user1 +# 客户端密码 +clientPassword: 12345 + + +websocket: + #服务端http地址,可以填nginx转发过的地址 + serverUrl: "ws://111.222.33.44:80/aaa" + # 服务端http地址,不用nginx的话直接配原始的服务端端口 + #serverUrl: "ws://111.222.33.44:20871" +forwards: + # 把192.168.0.2的22端口代理到本机的10022端口 + - localPort: 10022 + remoteHost: "192.168.0.2" + remotePort: 22 + # 同理也可以代理数据库等任意TCP端口,只要服务端的hppt所在服务器能访问到的端口都行 + - localPort: 10023 + remoteHost: "192.168.0.3" + remotePort: 3306 + + +``` + +执行如下命令启动客户端的hppt(3选1) + +jar包运行 +```shell +cd hppt +/bin/java -jar hppt.jar sc sc.yml +``` + +windows下可执行文件运行 +```shell +cd hppt +chcp 65001 +hppt.exe sc sc.yml +``` + +linux下可执行文件运行 +```shell +cd hppt +./hppt sc sc.yml +#后台运行用命令 nohup ./hppt ss ss.yml >/dev/null & +``` + +随后,你就可以在公司用linux连接工具访问localhost的10022端口,来登录应用服务器了 diff --git a/_doc/img/hpptdemo.jpg b/_doc/img/hpptdemo.jpg new file mode 100644 index 0000000..9306c4b Binary files /dev/null and b/_doc/img/hpptdemo.jpg differ diff --git a/_doc/page/kafkademo.md b/_doc/page/kafkademo.md deleted file mode 100644 index e69de29..0000000 diff --git a/_doc/readme.pptx b/_doc/readme.pptx index 958b8ab..ede8023 100644 Binary files a/_doc/readme.pptx and b/_doc/readme.pptx differ diff --git a/readme.md b/readme.md index 2c82a8f..af61d97 100644 --- a/readme.md +++ b/readme.md @@ -15,7 +15,9 @@ hppt,一款可通过任意协议转发tcp端口的工具。 # 快速开始 在[releases](https://github.com/codingmiao/hppt/releases) -页面下载最新版本编译好的hppt,或自行下载源码编译。 +页面下载最新版本编译好的hppt。 + +或自行下载源码编译: ```shell #jar mvn clean package -DskipTests @@ -38,11 +40,11 @@ jar包执行性能更好,但多消耗一些内存,如需jar包执行,请 ![示例1](_doc/img/3.jpg) -1、在集群中任一服务器上新建一个hppt目录,并上传hppt.jar(也可用可执行文件 hppt.ext 或 hppt)、ss.yml、log4j2.xml文件到此目录下: +1、在集群中任一服务器上新建一个hppt目录,并上传hppt.jar(也可用可执行文件 hppt.exe 或 hppt)、ss.yml、log4j2.xml文件到此目录下: ``` hppt - - hppt.jar + - hppt.jar (or hppt.exe or hppt_linux_file) - ss.yml - log4j2.xml ``` @@ -62,7 +64,7 @@ clients: password: 112233 ``` -(注1:作为快速演示,这里的type选择了最简单的post类型,此场景下最佳性能的协议为websocket,或是有独立端口的话可以配置hppt协议,ws、hppt版的说明奋力码字中。。) +(注1:作为快速演示,这里的type选择了最简单的post类型,此场景下可按[这篇文档](_doc/demo/websocket.md)配置websocket以获得更高性能,或是有独立端口的话可以按[这篇文档](_doc/demo/hppt.md)配置hppt协议) (注2:实际应用中,为了确保安全,建议把clientId设置得更复杂一些) @@ -78,9 +80,7 @@ windows下可执行文件运行 ```shell cd hppt chcp 65001 -title "hppt" hppt.exe ss ss.yml -pause ``` linux下可执行文件运行 @@ -106,11 +106,11 @@ server { 随后,访问`http://111.222.33.44:80/xxx/` 能看到“error 404”字样即证明服务端部署成功。 -2、自己笔记本上,新建一个hppt目录,拷贝hppt.jar、sc.yml、log4j2.xml文件到此目录下: +2、自己笔记本上,新建一个hppt目录,拷贝hppt.jar (or hppt.exe or hppt_linux_file)、sc.yml、log4j2.xml文件到此目录下: ``` hppt - - hppt.jar + - hppt.jar (or hppt.exe or hppt_linux_file) - sc.yml - log4j2.xml ``` @@ -128,6 +128,8 @@ clientPassword: 12345 post: # 服务端http地址,如无法直连,用nginx代理几次填nginx的地址也ok serverUrl: "http://111.222.33.44:80/xxx" + # 这个示例中,不用nginx的话直接配原始的服务端端口 + #serverUrl: "http://111.222.33.44:20871" # 人为设置的延迟(毫秒),一般填0即可,如果传文件等数据量大、延迟要求低的场景,可以设一个几百毫秒的延迟来降低post请求发送频率 sendSleepTime: 0 forwards: @@ -155,9 +157,7 @@ windows下可执行文件运行 ```shell cd hppt chcp 65001 -title "hppt" hppt.exe sc sc.yml -pause ``` linux下可执行文件运行 @@ -176,11 +176,11 @@ cd hppt ![示例2](_doc/img/4.jpg) -1、公网服务器上,新建一个hppt目录,拷贝hppt.jar、sc.yml、log4j2.xml文件到此目录下: +1、公网服务器上,新建一个hppt目录,拷贝hppt.jar(也可用可执行文件 hppt.exe 或 hppt)、sc.yml、log4j2.xml文件到此目录下: ``` hppt - - hppt.jar + - hppt.jar (or hppt.exe or hppt_linux_file) - sc.yml - log4j2.xml ``` @@ -211,17 +211,35 @@ forwards: ``` -执行如下命令启动公网服务器上的hppt +执行如下命令启动公网服务器上的hppt(3选1) +jar包运行 ```shell +cd hppt /bin/java -jar hppt.jar sc sc.yml ``` -2、家里的台式机上,新建一个hppt目录,拷贝hppt.jar、ss.yml、log4j2.xml文件到此目录下: +windows下可执行文件运行 +```shell +cd hppt +chcp 65001 +title "hppt" +hppt.exe sc sc.yml +pause +``` + +linux下可执行文件运行 +```shell +cd hppt +./hppt sc sc.yml +#后台运行用命令 nohup ./hppt ss ss.yml >/dev/null & +``` + +2、家里的台式机上,新建一个hppt目录,拷贝hppt.jar (or hppt.exe or hppt_linux_file)、ss.yml、log4j2.xml文件到此目录下: ``` hppt - - hppt.jar + - hppt.jar (or hppt.exe or hppt_linux_file) - ss.yml - log4j2.xml ``` @@ -249,13 +267,30 @@ clients: ``` -执行如下命令启动家里台式机上的hppt +执行如下命令启动家里台式机上的hppt(3选1) +jar包运行 ```shell cd hppt /bin/java -jar hppt.jar ss ss.yml ``` +windows下可执行文件运行 +```shell +cd hppt +chcp 65001 +title "hppt" +hppt.exe ss ss.yml +pause +``` + +linux下可执行文件运行 +```shell +cd hppt +./hppt ss ss.yml +#后台运行用命令 nohup ./hppt ss ss.yml >/dev/null & +``` + 随后,你就可以在公司用linux连接工具访问111.222.33.44的10022端口,来登录家里的台式机了 @@ -350,7 +385,7 @@ scp -P 10022 jdk-21_linux-aarch64_bin.tar.gz root@xxx:/xxx ## 安全性如何? -必须使用指定的clientId才能连接,数据传输过程中对字节进行了加密,如果你还需要更多的个性化验证,比如用户登录,可以发邮件到[liuyu@wowtools.org](liuyu@wowtools.org) +必须使用指定的用户才能连接,数据传输过程中对字节进行了加密以防监听,如果你还需要更多的个性化验证,比如用户登录,可以发邮件到[liuyu@wowtools.org](liuyu@wowtools.org) 进行定制化开发。 # 后续计划 diff --git a/run/src/main/resources/META-INF/native-image/reflect-config.json b/run/src/main/resources/META-INF/native-image/reflect-config.json index 5028623..6036872 100644 --- a/run/src/main/resources/META-INF/native-image/reflect-config.json +++ b/run/src/main/resources/META-INF/native-image/reflect-config.json @@ -662,7 +662,10 @@ "allDeclaredFields" : true, "queryAllDeclaredMethods" : true, "queryAllDeclaredConstructors" : true, - "methods" : [ ] + "methods" : [ { + "name" : "", + "parameterTypes" : [ ] + } ] }, { "name" : "org.wowtools.hppt.run.sc.pojo.ScConfig$Forward", "allDeclaredFields" : true, @@ -677,7 +680,10 @@ "allDeclaredFields" : true, "queryAllDeclaredMethods" : true, "queryAllDeclaredConstructors" : true, - "methods" : [ ] + "methods" : [ { + "name" : "", + "parameterTypes" : [ ] + } ] }, { "name" : "org.wowtools.hppt.run.sc.pojo.ScConfig$PostConfig", "allDeclaredFields" : true,