1 Star 3 Fork 6

李健 / JPierced

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
Apache-2.0

简介

使用NIO框架Netty写的内网穿透(PServer(服务端),PClient(被穿透客户端)),Vert.x实现的web服务;
1、支持TCP,HTTP,HTTPS协议,(暂不支持UDP,后续将会支持),类似Frp,但在对比Frp上,提供了http接口进行管理客户端比Frp更方便(由于前端好久没写了,所以未写前端页面,只有接口,后续可能会增加),增加删除修改端口映射,关闭指定端口监听,及启用指定端口及踢出客户端下线等都可使用接口操作,客户端无需重启及做别的操作;
2、使用多路通道复用,减少请求端发起连接时每次都需要被穿透的客户端创建新的连接导致连接请求延迟;
3、穿透的客户端和服务端采用TLSv1.3/SSL双向认证加密通信保证数据传输的安全,加密套件使用Openssl的分支Google Boring实现,比起JdkSSL性能上更好;
4、更好的支持HTTP及HTTPS,支持反向代理客户端 Https->Http或Http->Https的形式,在别的类似穿透应用所谓支持HTTP及HTTPS协议,实际上都只是做了TCP报文转发,而未对HTTP协议中Header的Host及Referer,Location中的URL地址及端口进行修改,导致请求部分较严格的HTTP服务时服务验证请求地址与报文中Host地址及端口不一致导致请求被拒绝,以及HTTP服务响应3xx重定向时地址未进行处理,导致跳转到真实地址的页面出现跨域等错误,对此服务端对Host,Referer,Location等HTTP Header中的URL及端口会进行相应修改替换,和Nginx的代理功能类似。
5、不同操作系统采用不同的Channel实现以使在该操作系统上达到最佳性能,Linux默认使用Epoll,Mac使用Kqueue,Windows采用Selector,使用ByteBuf零copy减少数据传输的堆外内存频繁复制到堆内存导致影响处理速度。

PServer配置

项目resources路径下server.properties文件是服务端相关配置,内容及说明如下:

# web管理的服务端口
web.port=8000 
# 是否启用支持HTTPS网页的穿透,开启支持需要在运行环境的同目录放置https的证书文件pierced.crt,pierced.key,key使用pkcs8,
# 可使用openssl命令直接将Nginx证书的key转为pkcs8的key,如下命令:
openssl pkcs8 -topk8 -inform pem -in 证书.key -outform pem -nocrypt -out 证书pkcs8.key
# 未配置证书时,启动将会默认关闭使用HTTPS。
# 配置证书后并启用https后,管理相关接口也将使用https
enable.https=true
# ack通道的端口(ack通道主要用于收发连接及连接响应消息,以及设置被穿透客户端的本地连接上的是否自动读等作用)
ack.port=6210
# 主要的数据传输端口
transmit.port=9999
# web管理的登录用户名及密码
login.username=xxxx
login.pwd=xxxx

PClient配置

项目resources路径下cient.properties文件是客户端相关配置,内容及说明如下:

# 以上配置的服务端地址
server.host=localhost
# 以上配置的服务端传输端口,注意是传输端口,非ack的端口
server.port=9999
# 客户端登录认证用户名及密码,用户名只支持Long的数字(必须在管理端添加客户端后才能登录,否则连接不上)
key=2222
pwd=xxx

部署和构建

使用JDK17编写,请确保安装的JDK版本在17或以上,可根据情况调整项目resources下的logback.xml日志级别等配置。
由于项目中默认放置了我自己生成的CA证书及密钥,可以直接使用,如需要自行生成,生成后替换掉resources/certs中相应的证书文件即可,注意生成的客户端及服务端证书都必须是统一CA签名的。
使用Maven命令mvn package编译打包成可运行的jar包(打包后在项目目录的target目录下);
1、将PServer.jar上传到有公网的服务器上,并同时上传server.properties配置文件(配置说明如上)
然后使用jar -jar PServer.jar命令运行即可,或使用nohup命令在后台运行nohup java -jar PServer-1.0-SNAPSHOT.jar > /dev/null 2>&1 &
2、将PClient.jar放到被穿透的机器上,在同目录下放置client.properties配置文件(配置说明如上)
然后使用jar -jar PClient.jar命令运行即可,或使用nohup命令在后台运行nohup java -jar PClient-1.0-SNAPSHOT.jar > /dev/null 2>&1 &
【注意】:客户端连接前必须现在服务端上进行对客户端用户和密码添加,然后启动客户端 客户端将与服务进行连接,连接及认证完成后才可使用,根据使用场景设置Jvm的内存大小。 3、使用docker部署PServer,配置参考项目中的Dockerfile,网桥配置一定要使用宿主机端口,否则会导致连接不上,详情参考Dockerbuild。 4、也可使用docker部署PClient,如果连接宿主机,IP需要填写host.docker.internal,否则会导致连接不上,docker具体配置,请参考项目内Dockerfile。

api接口及参数说明

【注意】:请求参数json中的数字参数不能使用引号,如111,使用"111"这样访问将会错误,需去掉引号数字参数的引号。
登录接口

POST请求
Json参数:{"username":"配置的用户名", "pwd":"配置的密码"}
http://xxx:port/api/login
登录成功后响应token,以下的所有请求接口中的header中都必须携带该token才能进行操作。

查询在线客户端列表

GET请求
Json参数可选:{"key": 数字key, "name":"可选参数", "serverPort":数字}
http://xxx:port/api/clientList

添加客户端用户名及密码

POST请求
Json参数:{"key":不重复的数字key, "pwd":"密码", "name":"客户端名"}
http://xxx:port/api/addClient

修改客户端信息

POST请求
Json参数:{"key":客户端数字key,"newKey":新的key, "pwd":"新密码", "name":"客户端名称"}
http://xxx:port/api/modifyClient

移除客户端

POST请求
Json参数:{"key":数字key}
http://xxx:port/api/removeClient

客户端下线

POST请求
Json参数:{"key":数字key}
http://xxx:port/api/shotClient

添加客户端的端口映射

POST请求  
protocol参数值说明: 1--TCP,2--HTTP,3--HTTPS
Json参数:{"key":数字客户端key, "serverPort":映射在服务端上的端口, "host":"被穿透机器上到目标机器的host", "port":被穿透机器上到目标机器的端口号, "protocol":数字,取值如上协议类型说明, "cliUseHttps": true 布尔值}
http://xxx:port/api/addClientPortMapping

修改客户端端口映射

POST请求  
protocol参数值说明: 1--TCP,2--HTTP,3--HTTPS
Json参数:{"key":数字客户端key, "oldServerPort":原端口, "newServerPort":新端口, "host":"被穿透机器上到目标机器的host", "port":被穿透机器上到目标机器的端口号, "protocol":数字,取值如上协议类型说明, "cliUseHttps": true 布尔值}
http://xxx:port/api/modifyClientPortMapping

移除客户端端口映射

POST请求  
Json参数:{"key":数字客户端key, "serverPort":要移除的端口}
http://xxx:port/api/removeClientPortMapping

重设置传输服务端口(重设置后将断开所有客户端,且老的客户端不可连接)

POST请求  
Json参数:{"serverPort":}
http://xxx:port/api/setTrasmitPort

重新设置web服务端口(重新设置后将重启管理接口的web服务)

POST请求  
Json参数:{"webPort":数字端口}
http://xxx:port/api/setWebPort

监听指定映射客户端的端口

POST请求  
Json参数:{"key":数字,客户端key,"port":已添加的端口号}
http://xxx:port/api/listenPort

取消监听指定映射客户端的端口

POST请求  
Json参数:{"key":数字,客户端key,"port":端口}
http://xxx:port/api/closePort
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

简介

使用NIO框架Netty写的内网穿透,支持TCP,HTTP,HTTPS协议(暂不支持UDP),类似Frp,但提供http接口,在客户端的管理上比Frp更方便,增加修改等客户端映射端口时,客户端无需重启;使用多路通道复用,减少客户端及请求端发起连接时每次都创建新的连接导致连接延迟缓慢,比起Frp速度更快,穿透的客户端和服务端采用TLSv1.3/SSL双向认证加密,保证数据传输的安全及性能。 展开 收起
Java 等 2 种语言
Apache-2.0
取消

发行版 (1)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
Java
1
https://gitee.com/lijiann/JPierced.git
git@gitee.com:lijiann/JPierced.git
lijiann
JPierced
JPierced
master

搜索帮助

53164aa7 5694891 3bd8fe86 5694891