- Java锁的逻辑(结合对象头和ObjectMonitor)
- 还在用饼状图?来瞧瞧这些炫酷的百分比可视化新图形(附代码实现)⛵
- 自动注册实体类到EntityFrameworkCore上下文,并适配ABP及ABPVNext
- 基于Sklearn机器学习代码实战
├── data.db
'sqlite数据库文件。若未配置mysql,默认使用sqlite,项目首次启动会自动初始化sqlite数据库。 ├── docs '项目相关的一些文档 ├── ├── Aop.MD '框架层Aop机制、使用说明 ├── └── Channel.MD '内网穿透实现原理、代理实现流程说明 ├── lib '项目开启了将自动生成的类保存到本地后,运行过程中动态生成的类自动保存到此处,方便学习、调试 ├── neutrino-core '一套手写的基于netty的框架,相当于简易版的SpringBoot + Mybatis + xxljob,计划后期分离为单独开源项目维护 ├── neutrino-proxy-admin '基于vue-element-admin开发的一个管理系统,用于可视化操作端口映射、代理数据实时监控 ├── neutrino-proxy-client '基于netty的代理客户端,用于和服务端交互、转发内网数据 ├── neutrino-proxy-core '代理相关的公共代码(协议、常量) ├── neutrino-proxy-server '基于netty的代理服务端,用于和客户段交互,将客户端转发的内网数据转发至外网端口 └── todolist.MD '近期的开发计划 复制代码
以下版本均为笔者开发时实际的使用版本 。
Node
:v13.12.0 Java
:1.8.0_351 Mysql
:8.0.31 (非必需,使用sqlite则无需考虑数据库) Nginx
:1.21.4 (非必需,可直接使用服务端项目提供的静态资源服务) 可直接前往 Gitee仓库发行版页面 下载所需版本已打好的包。 若需手动打包,则可参照下面的执行命令:
# 服务端打包 mvn clean install -U -pl neutrino-proxy-server -am -Dmaven.test.skip= true # 客户端打包 clean install -U -pl neutrino-proxy-client -am -Dmaven.test.skip= true # 管理后台前端项目打包(本地环境,local改为dev则为dev环境,同时需要修改config目录下面的环境配置) npm run build: local 复制代码
使用常规的jar包部署方式即可,如:java -jar xxxx 。
Nginx方式部署(推荐)
server {
listen 9527;
server_name localhost;
#开启gzip gzip on; #低于1kb的资源不压缩 gzip_min_length 1k; #压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。 gzip_comp_level 5; #需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片. gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持) gzip_disable "MSIE [1-6]\."; #是否添加“Vary: Accept-Encoding”响应头 gzip_vary on; location / { root /work/projects/neutrino-proxy-server/neutrino-proxy-admin/dist; try_files $uri $uri/ /index.html; add_header Last-Modified $date_gmt; } } 复制代码
在没有Nginx时,为了快速体验代理效果,可直接使用服务端项目提供的静态资源服务。 直接将 neutrino-proxy-admin 打包后的文件解压放在 neutrino-proxy-server.jar 同级别目录下即可。 例如:服务端配置的web端口为8080,则访问 http://服务端IP:8080 , 则会直接解析渲染 neutrino-proxy-server.jar 同级别目录下 neutrino-proxy-admin/dist/index.html .
需要注意的是,使用服务端自带的静态资源服务时,由于框架目前未支持缓存、gzip压缩,所以访问速度没有使用nginx快,正式使用推荐用nginx.
端口池的作用是将代理服务需要对外暴露的端口进行集中管理,方便安全组设置时统一操作.
本项目为了简化首次配置,默认初始化数据会将9101~9120的所有端口加入端口池。 可以在服务端项目sql配置(port_pool.data.sql文件)中自行修改初始化数据,也可以运行后在端口池管理页面手动维护.
首次使用如果为了快速体验,建议直接使用默认端口池,则无需任何配置.
用户是登录管理后台的身份主体,同时也是持有license的身份主体,用于支持代理连接的合法性认证.
本项目为了简化首次配置,默认初始化admin、visitor两个用户,默认密码为123456。 可以在服务端项目sql配置(user.data.sql文件)中自行修改初始化数据,也可以运行后在用户管理页面手动维护.
首次使用如果为了快速体验,建议直接使用默认用户,则无需任何配置.
License是客户端连接代理服务端时所需要的唯一合法凭证,一个License同时只能被一个客户端使用.
本项目为了简化首次配置,默认为每个用户初始化了一些license。 可以在服务端项目sql配置(license.data.sql文件)中自行修改初始化数据,也可以运行后在License管理页面手动维护.
首次使用如果为了快速体验,建议直接使用默认License,则无需任何配置.
端口映射是代理的基本单元,一个外网端口在同一时刻被唯一的映射到一个内网IP+端口。所有流出该外网端口的流量都转发自对应的内网端口,同理所有流入该外网端口的流量都会转发到对应的内网端口.
本项目为了简化首次配置,默认为每个用户初始化了一些端口映射。可以在服务端项目sql配置(port_mapping.data.sql文件)中自行修改初始化数据,也可以运行后在端口映射管理页面手动维护.
首次使用如果为了快速体验,建议直接使用默认端口映射,则无需任何配置.
上述步骤完成后,就可以开始代理自己的局域网设备了.
比如现在有一个license:a123456,该license配置了一个或多个端口映射,其中包含9010到localhost:8080的映射(localhost表示代理客户端所在主机的端口,可以换成客户端所在局域网的任何IP)。此时修改客户端配置的服务端ip、license等启动客户端,就可以开启代理了,端口映射管理对应的记录在线状态为"在线"则证明代理成功建立.
该license配置也可以通过客户端启动参数、启动后引导式输入、外置配置提供,为了简化首次体验门槛,这里直接提供一个外置配置模版:
{ "jksPath" : "classpath:/test.jks" , "licenseKey" : "b0a907332b474b25897c4dcb31fc7eb6" , "serverIp" : "localhost" , "serverPort" : 9002 , "sslEnable" : true } 复制代码
修改上述json中的licenseKey,serverIp、serverPort、sslEnabled后,保存文件命名为 .neutrino-proxy-client.json ,放在客户端当前目录下(jar包启动时,放在jar包同级别目录下。idea启动时,放在项目根目录下),然后直接启动客户端.
此时通过访问外网ip+端口,可以成功访问内网服务。通过此方式,可以代理任何基于TCP之上的协议,如:socket、websocket、http、ftp、ssh等.
篇幅所限,此处不便赘述管理后台相关的开发,有vue基础的童鞋基本都可以自行开发。服务端的初始化数据足够调试工作,开发过程无需单独在管理页面操作.
与SpringBoot项目类似,客户端、服务端项目均由一个入口类完成整个项目的启动,分别为 ProxyClient 、 ProxyServer .
内置配置采用yml风格,主要涉及Http端口、静态资源路径、协议参数、代理服务端端口、jks证书、数据源、license等。 整个项目基于 neutrino-core ,风格类似于SpringBoot。笔者不喜欢因过分炫技而引入过多花式操作,因为项目的定位是个人开发者,且满足使用的同时兼顾学习其原理的需求。基本使用方式与SpringBoot类似,尽可能降低首次学习成本.
neutrino-core 项目test目录下包含众多核心封装的测试代码,通过调试这些代码,能尽可能减少大家学习的障碍.
License管理:
端口映射管理:
端口池管理:
用户管理:
从 2022-06-16 第一个完整可用版本发布(无管理后台、无DB,纯配置实现)起,该项目已具备完整的内网穿透功能。经过后续的不断重构,初步完成了以下迭代:
由于笔者工作之余才能进行开发,可投入时间不固定。截至目前(2023-02),该项目2.0版本仍未发布,基于此未来的计划如下:
笔者时间、能力有限,且开源项目非一朝一夕之事,存在众多问题亦在所难免。使用、学习过程中有任何问题欢迎大家与我联系.
对项目有什么想法或者建议,可以加我微信 yuyunshize 拉交流群,或者创建 issues ,一起完善项目 。
。
。
最后此篇关于【新晋开源项目】内网穿透神器[中微子代理]加入Dromara开源社区的文章就讲到这里了,如果你想了解更多关于【新晋开源项目】内网穿透神器[中微子代理]加入Dromara开源社区的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
去年(2023年)年底我初学flutter,看了一些文档和教程,想找个东西*练练手。 小时候看过一个关于历史名人儿时事迹的短片,有一集是讲*总理的,有一个细节我记得很清楚:幼年***经常要做一个游戏
今天给大家分享一个我做的小工具,可以自定义扩展右键菜单的功能来提高工作效率,效果图如下: image 如上图,右键菜单多了几个我自定义的菜单
任何人都可以建议我应该使用什么程序/方法? 我需要有一个像谷歌地图这样的 map ,我可以在其中显示 map 、添加标记多边形等。 但是我不能依赖这样的在线服务,因为客户担心这样的服务会消失,我们的系
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 想改进这个问题?将问题更新为 on-topic对于堆栈溢出。 6年前关闭。 Improve this qu
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题? Update the question所以它是on-topic对于堆栈溢出。 11年前关闭。 Improve this qu
As it currently stands, this question is not a good fit for our Q&A format. We expect answers to be
您知道 EDA(电子设计自动化)领域有哪些开源项目正在寻找 C++ 程序员吗? 最佳答案 如果您经常关注 gEDA 的邮件列表,您也许能够加入 gEDA。详情:http://www.gpleda.or
如果现有Hadoop群集上有10个数据节点,则可以在4个或6个数据节点上安装NiFi吗? NiFi的主要目的是每天将数据从RDBMS加载到高容量的HDFS。 数据节点将配置为具有100 GB的高RAM
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
Closed. This question is off-topic。它当前不接受答案。
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 4 年前。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的图形验证码类库,今天我们继续为大家介绍其中的扩展动态对象类库。 扩展动态对象是整个工具库中最重要的一个设计。
【Github源码】 《上一篇》 介绍了Xmtool工具库中的Web操作类库,今天我们继续为大家介绍其中的图形验证码类库。 图形验证码是为了抵御恶意攻击出现的一种设计;例如用
【Github源码】 《上一篇》 介绍了Xmtool工具库中的发送短信类库,今天我们继续为大家介绍其中的XML操作类库。 XML操作是软件开发过程中经常会遇到的情况;包括XM
作者以 SciTime 项目(一个对算法训练时间进行估计的包)的发布为例,详细解释了发布的每个步骤。 注意:本文假设你在 GitHub 上已经有一个想要打包和发布的项目。 第 0 步:获取项
前言 今天大姚给大家分享一个C#开源(MIT License)、免费、简单易用的Dapper扩展类库,帮助.NET开发者使用Dapper的CRUD操作变得更简单:Dommel。 项目特性
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 卷积神经网络(CNN)通过从原始数据中自动学习层次特征表示,在图像识别任务中取得了巨大成功。虽然
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 血压的测量和预测是心脏病患者和有心脏问题的人的一个重要条件,应该保持持续的控制。在这项研究中,基
具体的软硬件实现点击 http://mcu-ai.com/ MCU-AI技术网页_MCU-AI人工智能 心血管疾病是最严重的死亡原因之一,每年在全世界造成严重的生命损失。持续监测血压似乎是最可行的选择
我是一名优秀的程序员,十分优秀!