内网穿透工具
内网穿透工具
Q群:438793541 群密码:natcross2
服务端-ServerApp打包:
# 修改ServerApp.java中serviceIp为公网服务器的IP
mvn clean compile package -PserverApp
客户端-ClientApp打包:
mvn clean compile package -PclientApp
CommonConstants:
| 字段 | 解释 |
|---|---|
| serviceIp | 公网服务器的IP |
| servicePort | 服务端的控制端口,主要用来与客户端进行指令交互 |
| listenPort | 服务端的监听端口,也就是部署完成后,在外网访问 serviceIp:listenPort 的方式对内网应用进行访问 |
| destIp | 要开放到公网的内网应用所在机器的IP |
| destPort | 要开放到公网的内网应用的端口 |
| aesKey | 交互密钥key,保证数据的秘密性,可以查看 SecretInteractiveModel.java 中的fullMessage和checkAutograph中确认密钥的使用方式。 |
| 如果你使用了secretAll方式进行部署,这个key还是数据加密的key,可以在 SecretPassway.java 中确认密钥的使用方式 | |
| 注意使用长度,windows版本的java只能用最大128长度的密钥 | |
| tokenKey | 交互签名key,签名同aesKey |
ServerApp:
| 字段 | 解释 |
|---|---|
| sslKeyStorePath | ssl证书的路径,默认方法只支持pkcs12的证书格式,使用这个证书可以做到https协议转http协议 |
| sslKeyStorePassword | 证书密码 |
| createServerSocket | 创建socket的方式,主要针对普通socket和sslSocket的方式进行封装,结合ssl证书使用 |
ClientApp:
| 字段 | 解释 |
|---|---|
| #secretHttpRoute:routes | http方式,根据不同host路由选择不同的目标应用 |
因NAT网内CLIENT可以正常连接到SERVER端,并且能够保持一段时间的长连接,则由CLIENT发起连接,建立SOCKET对,在SERVER收到外部请求时,可以通过已经建立好的SOCKET将数据传输给CLIENT,CLIENT使用相同的方式将数据发送给指定的网络程序,网络程序回发数据后则按原路返回给请求方。
| 技术 | 体现点 |
|---|---|
| Socket | 核心技术概念 |
| NIO | nio.NioHallows,使用Selector作为注册监听器(多路复用),有事件唤起后会创建子线程进行异步处理 |
| TCP粘包、拆包的解决 | channel.LengthChannel,此处用的是一个大端序列的长度加消息内容的方式 |
| 线程管控 | clientside.ClientControlThread、serverside.client.ClientServiceThread、serverside.listen.ServerListenThread作为独立管控及子线程异步处理的主要体现,亦可通过executor包下相关类进行追踪 |
| HTTP路由 | api.socketpart.HttpRouteSocketPart#routeHost,一个简单的对host头部字段的处理应用 |
| 消息加密 | 对AES、MD5联合的使用示例,channel.SecretInteractiveChannel、model.SecretInteractiveModel,对实际消息进行加密,增加辅助字段保证消息的真实性、准确性和完整性 |
| 计数门闩 | utils.CountWaitLatch,类CountDownLatch,增加了countUp,不只受初始化的值决定,可以增加、减少,主要用来解决nio.NioHallows唤醒后批量channel注册的问题(等下,怎么感觉可以用读写锁来解决呢?) |
| 线程池 | 虽然用了线程池,但默认的是Executors.newCachedThreadPool()来生成的,具体的还是需要根据机器来自定义线程池,主要还是对子线程的管控体现吧 |
暂无开放 Issues,或尚未同步最近议题。