# 介绍
##
## 什么是内网穿透?
我想很多小伙伴刚学开发的时候,都会有一个想法,把自己写的网站运行在自己的电脑上,然后还想让别人通过网络访问到。
然后就接触到了花生壳,natapp,等穿透软件,感觉好神奇,为什么运行一个客户端就可以让别人通过外网访问到呢?这是怎么实现的呢,带着这个好奇心,所以就写了这个软件。
## 为什么要自己搭建一个内网穿透?
使用第三方的内网穿透软件,比如natpp等,1、数据都流过他们的服务器,相对来说不太安全,2、 如果不充钱,网速慢不说,natpp还会限制你每分钟的请求数,还要注册一堆账号,泄漏个人信息给这些平台,
如果我们自己搭建一个穿透,带宽我们自己独享,而且没有数据泄漏的问题。
这个项目支持所有tcp上层协议,比如远程桌面,rtmp直播等
## 软件结构
![](https://img.kancloud.cn/60/ff/60ffd728f8d156b9c3140220c224efd4_694x359.png)
## 如何导入项目?
* 先通过git拉取代码 https://gitee.com/haojiangbo/venomous_sting.git
* 导入idea或者eclise, 如何导入代码, [请自行百度 O(∩_∩)O~~]
* 下面是导入成功后的代码
* ![这是代码](https://img.kancloud.cn/b8/3d/b83d41ca85492f51af088ac04aa334ab_420x439.png)
## 如何运行项目
* **第一步** 找到proxy模块根目录下的config文件
```
#二级域名,端口,客户端Id(key),本地服务地址和端口号
www,8080,1587133230,127.0.0.1:80
mysql,8081,1587133232,127.0.0.1:3306
首先我说明一下 这几个字符的含义,
我称他为路由表
www 是要配置的二级域名
8080 是服务单监听的端口,
1587133230 是clientId,只有这里正确了clientId,客户端才能连接上
127.0.0.1:80 就是需要暴露的 本地服务,必须为 host:port 的格式
详情请参考服务端源码解读文档
```
* **第二步** 配置服务端端口号
![](https://img.kancloud.cn/f5/e3/f5e32f9c124fd3d4b26c2bc29b8363bc_980x392.png)
* **第三步** 启动服务端
先按照第一步的配置,配置成功后,找到proxy模块start包目录下面的StartProxyServerApp.java 启动main函数即可
* **第四步** 配置客户端
![](https://img.kancloud.cn/bf/5e/bf5e9c2b437566685db5c0569f041d94_1000x394.png)
* **第五步** 启动客户端
先按照第四步的配置,配置成功后,找到proxyclient模块start包目录下面的ClientAppStart.java 启动main函数即可
## 如何使用 cli 使用命令行的方式 操作 config(路由表)
```
java -jar proxyServer.jar cli #启动 cli
目前只支持 list get set del flush exit 这几条命令
list 命令 查看 当前所有路由表
get 命令 get <clientId> 查看某一个clientId的路由表 例如 get abc
set 命令 set <clientId> <field> <value> 设置路由表中具体的属性 比如 set abc port 999
del 命令 del <clientId> 删除路由表中的某一条记录
flush 命令 使 当前路由表 立即生效
exit 退出当前客户端
```
## 常用命令截图
![](https://img.kancloud.cn/71/5f/715f6fe069569993d364a7ba7a87f99b_1031x785.png)
## 关于文档收费的问题
* 本项目代码完全开源,相信很多小伙伴即使不通过文档,也可以进行正常的运行和使用
* 因为写文档确实要比写代码困难多了,需要耗费大量的时间,所以收点费用当自己的幸苦费,希望大家理解