应用场景

1.公司电脑与家中电脑的远程控制,一般通过teamview、向日葵等软件,端口互通后,可以使用电脑自带的远程桌面

2.家中电脑搭建SVN、git仓库,在外网或者内网访问,一般使用云服务器,端口互通后,可以部署在任意电脑

3.家中电脑搭建数据库、web服务以及其他基于TCP协议的服务,端口互通后,可以部署在任意电脑

注意:并不是说就不需要购买云服务器了,而是运行的服务可以部署在任意电脑,云服务器仍是必须的,但是可以买最便宜的服务器以达到省钱的目的

技术原理

模式一  服务器中转:

  场景:我们有电脑A和电脑B,他们在不同的局域网,现在我们需要在电脑A访问电脑B的web服务(端口是80)

  原理:我们通过监听电脑A的端口80,当此端口接收到http请求的时候,程序将通过一些操作,在电脑A、服务器以及电脑B中建立一条专用TCP链接,然后电脑A将80端口接收到的数据转发到服务器中,然后服务器再把数据发送给电脑B的80端口,从而实现访问电脑B的web服务的目的。

模式二 直接连接:

  场景:我们有电脑A和电脑B,他们在不同的局域网,现在我们需要在电脑A访问电脑B的web服务(端口是80)

  原理:我们通过监听电脑A的端80,当此端口接收到http请求的时候,程序将通过一些操作,在电脑A与电脑B中建立一条直连的TCP连接,然后电脑A将80端口收到的数据直接发送到电脑B的80端口,从而实现访问电脑B的web服务。

项目结构介绍

完整结构:

项目一共分为2种:

第一种:.net standard开发的核心库,编译后是dll,可以跨平台但不能直接运行

第二种:另一种是.net core以及.net framework开发的启动器,编译后是各个平台可以运行的程序。

将核心库的dll,放入启动器的指定目录中,才能正常运行程序。

P2PSocket.Core项目

这个项目主要是一些基类的实现,具体就不介绍了。

P2PSocket.Client项目

这是客户端的核心库

Commands:用于处理来自服务端发送的消息

ConfigIO:配置文件的读取

Receive:因为拆包是自己写的,在基类,而由于一些特殊情况,会需要不同的拆包逻辑,继承基类后的新类都在Receive目录(名字错了哈哈哈)

Send:这个目录主要存放的是发送到服务端的数据包封装类

P2PSocket.Server

这是服务端的核心库,结构与客户端一致

P2PSocket.StartUp项目

这是一个.net core2.1项目,主要是通过反射启动客户端或者服务端,它可以跨平台。

P2PSocket.StartUp_Windows项目

这是专门为windows开发的启动器,主要是可以注册为服务,从而达到开机自启的目的。

剩下的项目可以忽略了。

项目源码下载地址

https://github.com/bobowire/Wireboy.Socket.P2PSocket

最新程序下载地址

https://github.com/bobowire/Wireboy.Socket.P2PSocket/releases

结语

这个项目是2019年2月开始开发的,那时候因为teamview开始有商业模式限制,所以自己萌发了做一款端口互通的软件,不仅可以帮助公司协助解决用户问题,还能在公司远程家里以及在家里加班???哈哈哈

最初的版本开发了差不多20多天,然后经过2次代码重构,变成了现在这个样子。代码重构很痛苦,大家写代码需谨慎。当然,在我的计划中,我又要开始第3次代码重构了。

有了这个东西之后,我发现很多程序员需要的东西就不再那么纠结了,比如我想要个数据库,想要个svn,想要个自己用的web网盘,不用去管云服务器的硬盘、cpu等限制了,还是很实用的。不过你可能需要一个大宽带的云服务器了哈哈。

另外关于程序的性能,我用的阿里云服务器,程序满载宽带的话,cpu差不多是3.5%左右。另外有人给我这个程序测试了一下能够连接的客户端数量,说是500+的客户端连接正常使用,他测不了更多了。

最后,github中的star大家可以点一下,如果你们fork了代码,一定要隔一段时间同步一下主版本的代码。github中的QQ群大家如果没问题就不要加进去了,因为没问题的人都会被清理出去。最后,欢迎大家提bug,不要提需求!!!

github首页展示

使用.net standard实现不同内网端口的互通(类似花生壳)的更多相关文章

  1. iptables端口转发规则(内网端口转外网端口)

    需求:外网124.202.173.118需要访问 10.45.225.70的内网54032端口,10.45.225.70服务器有公网地址139.129.109.81将内网地址端口转发到外网地址端口,并 ...

  2. linux下搭建redis内网端口映射工具-rinetd

    最近在工作中使用到了redis缓存,用来提某些业务场景的计算速度和某些情况下的操作频率限制,客户端工具使用了redisDesktopmanager来管理,在本机操作测试的时候,是没有问题的.但是将系统 ...

  3. 传输层隧道技术之lcx内网端口转发

    传输层技术包括TCP隧道.UDP隧道和常规端口转发等.在渗透测试中,如果内网防火墙阻止了指定端口的访问,在获得目标机器的权限后,可以使用IPTABLES打开指定端口.如果内网中存在一系列防御系统,TC ...

  4. linux下内网端口转发工具:linux版lcx [实现远程内网维护]

    这个工具以前使用的初衷是内网渗透,需要将内网ssh端口转发到外网服务器上.但这个工具同样适用于运维工程师进行远程内网维护. 当然这一切的前提是内网可以访问外网,检测方法当然就是直接ping 一个外网I ...

  5. SSH 内网端口转发实战

    导读 大家都知道SSH是一种安全的传输协议,用在连接服务器上比较多.不过其实除了这个功能,它的隧道转发功能更是吸引人. 如果两个内网之间的linux服务器需要互相登录,或需要互相访问内网某个端口,担忧 ...

  6. Tp-link路由器怎么设置端口映射 内网端口映射听语音

    https://jingyan.baidu.com/article/ca00d56c710ef9e99eebcf85.html 只有一台能上网的电脑就可以自己免费搭建服务器,本经验简单介绍家用tp-l ...

  7. 单线拨号上网时RouterOS内网端口映射的配置

    很多时候routeros 是通过单线拨号上网,假设PPP接口名为pppoe-out1 若需要添加内网ip=18.16.1.92主机的3389端口映射 ,可以在命令行键入: ip firewall na ...

  8. 内网端口映射+dnslog

    以前的DNSLOG部署在公网上也即自己的服务器上,产品依赖个人的环境不是很好.于是做了修改. 框架 细节 1)A域名的域名服务器指向B域名 ns0.B.com ns1.B.com 2)B域名的两个ns ...

  9. 内网端口转发[SSH]

    一.应用场景 获取到目标边界机器linux服务器一台,想继而向内网其他机器渗透,获取到一台webshell发现处于内网当中且不通外网.可以通过linux ssh隧道对目标内网机器进行访问. 二.利用手 ...

随机推荐

  1. Java实现找零问题

    1 问题描述 现需找零金额为n,则最少需要用多少面值为d1 < d2 < d3 < - < dm的硬币?(PS:假设这m种面值d1 < d2 < d3 < - ...

  2. Linux帮助命令man详解

    命令man详解 命令man,可以获得命令(使用whatis命令可以得到一个命令的简短介绍,可以使用:命令 --help 来获得命令的选项说明)或配置文件的帮助信息(可以使用apropos命令仅查看配置 ...

  3. Python 爬虫之request+beautifulsoup+mysql

    一.什么是爬虫?它是指向网站发起请求,获取资源后分析并提取有用数据的程序:爬虫的步骤: 1.发起请求使用http库向目标站点发起请求,即发送一个RequestRequest包含:请求头.请求体等 2. ...

  4. 算法讲堂二:组合数学 & 概率期望DP

    组合数学 1. 排列组合 1. 加法原理 完成一列事的方法有 n 类,其中第 i 类方法包括\(a_i\)种不同的方法,且这些方法互不重合,则完成这件事共有 \(a_1 + a_2 + \cdots ...

  5. Java基础?看完以后再也不惧怕面试了

    前言 这篇文章主要是Java基础部分,主要分为3个部分:Java集合.Java多线.JVM:这些东西帮助我面试成功率提升了很多.后面还有中间件Spring.Redis.RocketMQ等等吧,祝愿大家 ...

  6. ecshop php商城系统数据库结构及表的介绍分析

      ecshop共86张表,确实比较多,不过功能确实最完善的. 表结构分析 ecs_account_log // 用户账目日志表 ecs_activity // 活动表(代码,名称,开始,结束,描述) ...

  7. Scrum Master教你四招,瓦解团队内部刺头

    摘要:<Scrum精髓>一书中将Scrum Master的职责总结为六类:敏捷教练,服务型领导,“保护伞”,“清道夫”,过程权威,“变革代言人”.作为“保护伞“,Scrum Master应 ...

  8. (七)Maven Profile 和 Filtering

    每个项目都会有多套运行环境(开发,测试,正式等等),不同的环境配置也不尽相同(如jdbc.url),借助Jenkins和自动部署提供的便利,我们可以把不同环境的配置文件单独抽离出来,打完包后用对应环境 ...

  9. MySQL 性能优化细节

    服务器层面优化(了解) 将数据保存在内存中,保证从内存读取数据 设置足够大的innodb_buffer_pool_size,将数据读取到内存中. 建议innodb_buffer_pool_size设置 ...

  10. numpy.stack和numpy.concatenate的区别

    在使用numpy进行矩阵运算的时候踩到的坑,原因是不能正确区分numpy.concatenate和numpy.stack在功能上的差异. 先说numpy.concatenate,直接看文档: nump ...