应用场景

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实现 LeetCode 97 交错字符串

    97. 交错字符串 给定三个字符串 s1, s2, s3, 验证 s3 是否是由 s1 和 s2 交错组成的. 示例 1: 输入: s1 = "aabcc", s2 = " ...

  2. Java实现蓝桥杯历届试题填字母游戏

    题目描述 小明经常玩 LOL 游戏上瘾,一次他想挑战K大师,不料K大师说: "我们先来玩个空格填字母的游戏,要是你不能赢我,就再别玩LOL了". K大师在纸上画了一行n个格子,要小 ...

  3. java实现第四届蓝桥杯三部排序

    三部排序 题目描述 一般的排序有许多经典算法,如快速排序.希尔排序等. 但实际应用时,经常会或多或少有一些特殊的要求.我们没必要套用那些经典算法,可以根据实际情况建立更好的解法. 比如,对一个整型数组 ...

  4. Babel 7 安装与配置

    Babel:帮我们把高级的语法(ES6)转为低级的语法 /*    Babel 7.x版本  安装如下 (cnpm i @babel/cli -D)                     //Bab ...

  5. JSP基础知识点(转传智)

    一.JSP概述    1.JSP:Java Server Pages(运行在服务器端的页面).就是Servlet.    学习JSP学好的关键:时刻联想到Servlet即可.    2.JSP的原理  ...

  6. SpringBoot整合分布式ZooKeeper和Dubbo

    ZooKeeper ZooKeeper是一个分布式的,开放远吗的分布式应用程序协调服务.它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护.域名服务.分布式同步.组服务等. 服务提供者 ...

  7. openshift v1.5 不能登录system:admin 问题

    这个好像是无法解决的,我按照github和google所有步骤试过了,还是不能登录system:admin .需要密码.弄了两个小时,后来放弃了,直接使用新版本3.6的,按照官网方法部署,可以使用直接 ...

  8. 备份、恢复数据库(Dos命令提示符下)_数据库安装工具_连载_1

    Dos命令提示符下: 备份.恢复数据库,是不是很简单啊,是的,当你20年不碰MS SQL,是不是又忘记了呢,答案也许也是吧,^_^虽然在程序中执行SQL代码时,很讨厌那个Go,正如MySQL中那个分号 ...

  9. mitmdump+python的使用(代码篇)

    mitmproxy+python代码篇 一.上个推文我们介绍了mitmdump的简单操作,下面我们开始学习,mitmdump配合python脚本的使用.第一点先讲日志输出.请看图片 先导入ctx模块: ...

  10. Spark GraphX企业运用

    ========== Spark GraphX 概述 ==========1.Spark GraphX是什么?  (1)Spark GraphX 是 Spark 的一个模块,主要用于进行以图为核心的计 ...