前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >科普啦:内网穿透是怎么实现的

科普啦:内网穿透是怎么实现的

原创
作者头像
用户5997228
发布于 2023-10-26 09:14:20
发布于 2023-10-26 09:14:20
3K00
代码可运行
举报
文章被收录于专栏:IBCSIBCS
运行总次数:0
代码可运行

内网穿透的技术原理主要是通过将外部网络请求转发至本地内网,使得用户可以在外网环境下访问内部应用。具体来说,内网穿透技术是在公网上架设一个服务器,然后在内网中安装客户端,客户端通过与服务器建立连接,将内网服务的数据传输到服务器上,再由服务器将数据转发给公网用户。这种方式使得具有特定源 IP 地址和源端口号的数据包不被 NAT 设备屏蔽而正确路由到内网主机。

由于IPV4资源的匮乏,内网穿透的用途开始变得越来越多,比较有代表性的是神卓互联、IBCS虚拟专线等。

其具体的实现还是比较复杂的,这里涉及到复杂的网络编程和并发要求,以下是

极具代表性的神卓互联内网穿透展示图(以实际下载安装的版本为准),涉及到客户端与服务端的同步应答,通道缓冲区的处理和内存池的优化等,还需具备一定的应对网络攻击的能力。

下面是一个简单的Python代码示例,用于实现本地端口转发,这个是实现内网穿透的基础,先来练练手:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import sys
import socket
import threading

def forward(source, destination):
    while True:
        data = source.recv(1024)
        if len(data) == 0:
            break
        destination.sendall(data)

def port_forward(local_port, remote_host, remote_port):
    try:
        server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
        server.bind(('localhost', local_port))
        server.listen(5)
        print('Port forwarding started on port', local_port)

        while True:
            client, addr = server.accept()
            print('Received connection from', addr[0], 'on port', local_port)

            remote = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
            remote.connect((remote_host, remote_port))

            threading.Thread(target=forward, args=(client, remote)).start()
            threading.Thread(target=forward, args=(remote, client)).start()

    except KeyboardInterrupt:
        print('Port forwarding stopped.')
        sys.exit(0)
    except Exception as e:
        print('Error:', str(e))
        sys.exit(1)

if __name__ == '__main__':
    local_port = 8080
    remote_host = 'example.com'
    remote_port = 80

    port_forward(local_port, remote_host, remote_port)

使用此代码,将本地的8080端口转发到远程主机example.com的80端口。可以根据需要修改变量local_port、remote_host和remote_port。运行代码后,客户端连接到本地8080端口将被转发到远程主机。转发是双向的,从远程主机接收的响应也将返回给客户端。按Ctrl + C可以停止端口转发。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
作者已关闭评论
暂无评论
推荐阅读
编辑精选文章
换一批
【性能案例】Jmeter测试Apache ActiveMQ
1、将%ActiveHome%/lib下的jar拷贝到%JMeterHome%/lib下,主要涉及以下jar包:
Luga Lee
2022/03/25
7690
【性能案例】Jmeter测试Apache ActiveMQ
消息队列使用的四种场景介绍
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题
李海彬
2018/07/26
9190
消息队列使用的四种场景介绍
分布式消息队列
一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。 目前在生产环境,使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ等。 二、消息队列应用场景 以下介绍消息队列在实际应用中常用的使用场景。异步处理,应用解耦,流量削锋和消息通讯四个场景。 2.1异步处理 场景说明:用户注册后,需要发注册邮件和注册短信。传统的做法有两种
用户1263954
2018/01/30
3K0
分布式消息队列
大型网站架构系列:消息队列(二)
本文是大型网站架构系列:消息队列(二),主要分享JMS消息服务,常用消息中间件(Active MQ,Rabbit MQ,Zero MQ,Kafka)。 【第二篇的内容大部分为网络资源的整理和汇总,供大家学习总结使用,最后有文章来源】 本次分享大纲(接上篇) 消息队列概述(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息队列应用场景(见第一篇:大型网站架构系列:分布式消息队列(一)) 消息中间件示例(见第一篇:大型网站架构系列:分布式消息队列(一)) JMS消息服务 常用消息队列 参考(推荐)资料 本
小小科
2018/05/03
1.3K0
大型网站架构系列:消息队列(二)
Java消息队列--JMS概述
1、什么是JMS  JMS即Java消息服务(Java Message Service)应用程序接口,是一个Java平台中关于面向消息中间件(MOM)的API,用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一个与具体平台无关的API,绝大多数MOM提供商都对JMS提供支持(百度百科给出的概述)。我们可以简单的理解:两个应用程序之间需要进行通信,我们使用一个JMS服务,进行中间的转发,通过JMS 的使用,我们可以解除两个程序之间的耦合。 2、JMS的优势   Asynch
九灵
2018/03/09
2.3K0
Java消息队列--JMS概述
【EJB学习笔记】——JMS和消息驱动Bean
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/50996458
DannyHoo
2018/09/13
6600
【EJB学习笔记】——JMS和消息驱动Bean
消息队列——ActiveMQ使用及原理浅析
什么是消息中间件?随着业务的急速增长以及分布式架构的逐渐兴起,首先要考虑的就是如何高效的在各节点之间传递消息,其次要考虑的是流量洪峰时如何削减系统的压力以及跨平台消息的传输等问题,消息中间件就可以帮我们解决以上问题。而消息队列产品众多,我们该如何选择呢?本系列文章主要针对目前使用最多的ActiveMQ、Kafka、RabbitMQ进行讲解说明。
夜勿语
2020/09/07
4.2K0
性能工具之Jmeter扩展函数及压测ActiveMQ实践
首先本文将以Java扩展一个返回两个数值之和函数的例子来简单演示整个过程。 总体来说,二次开发扩展JMeter的函数可以分成下面几个步骤:
高楼Zee
2019/07/17
8680
性能工具之Jmeter扩展函数及压测ActiveMQ实践
ActiveMQ使用入门
RMI、SOA和微服务等架构,为JavaEE系统的分布式提供了可能,软件理论上可以不被 物理硬件限制而无限扩展。但这些的远程调用是同步操作的,不可避免存在一些局限:
用户10175992
2022/11/15
2.2K0
ActiveMQ使用入门
Docker学习之搭建ActiveMQ消息服务
ActiveMQ 是Apache出品,最流行的,能力强劲的开源消息总线。ActiveMQ 是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,尽管JMS规范出台已经是很久的事情了,但是JMS在当今的J2EE应用中间仍然扮演着特殊的地位。
小柒2012
2018/10/09
2.3K1
Docker学习之搭建ActiveMQ消息服务
【消息队列 MQ 专栏】消息队列之 ActiveMQ
ActiveMQ 是由 Apache 出品的一款开源消息中间件,旨在为应用程序提供高效、可扩展、稳定、安全的企业级消息通信。它的设计目标是提供标准的、面向消息的、多语言的应用集成消息通信中间件。ActiveMQ 实现了 JMS 1.1 并提供了很多附加的特性,比如 JMX 管理、主从管理、消息组通信、消息优先级、延迟接收消息、虚拟接收者、消息持久化、消息队列监控等等。其主要特性有:
芋道源码
2018/07/31
6.7K1
【消息队列 MQ 专栏】消息队列之 ActiveMQ
Message Queue消息队列基本原理
如果需要和新的系统建立通信或删除已建立的通信,都需要修改代码,这种方案显然耦合度很高。
Java宝典
2021/01/14
3.3K0
Message Queue消息队列基本原理
ActiveMQ消息队列的使用及应用
ActiveMQ消息队列的使用及应用 这里就不说怎么安装了,直接解压出来就行了。 谢绝转载,作者保留所有权力 目录: 复制代码 一:JMQ的两种消息模式 1.1:点对点的消息模式 1.2:订阅模式 二:点对点的实现代码 2.1:点对点的发送端 2.2:点对点的接收端 三:订阅/发布模式的实现代码 3.1:订阅模式的发送端 3.2:订阅模式的接收端 四:发送消息的数据类型 4.1:传递javabean对象 4.2:发送文件 五:ActiveMQ的应用 5.1:保证消息的成功处理 5.2:避免消息队列的并发 5
企鹅号小编
2018/02/01
1.6K1
消息中间之ActiveMQ
JMS(JAVA Message Service,java消息服务)是java的消息服务,JMS的客户端之间可以通过JMS服务进行异步的消息传输。JMS(JAVA Message Service,java消息服务)API是一个消息服务的标准或者说是规范,允许应用程序组件基于JavaEE平台创建、发送、接收和读取消息。它使分布式通信耦合度更低,消息服务更加可靠以及异步性。
HUC思梦
2020/09/03
2.1K0
消息中间之ActiveMQ
消息队列Kafka - 应用场景分析
一、消息队列概述 消息队列中间件是分布式系统中重要的组件,主要解决应用解耦,异步消息,流量削锋等问题,实现高性能,高可用,可伸缩和最终一致性架构。目前使用较多的消息队列有ActiveMQ,RabbitMQ,ZeroMQ,Kafka,MetaMQ,RocketMQ
conanma
2022/04/07
9290
消息队列中间件(二)使用 ActiveMQ
Active MQ 是由 Apache 出品的一款流行的功能强大的开源消息中间件,它速度快,支持跨语言的客户端,具有易于使用的企业集成模式和许多的高级功能,同时完全支持 JSM1.1 和 J2EE1.4 。
未读代码
2019/11/04
1.8K0
消息队列中间件(二)使用 ActiveMQ
activemq学习之activemq功能(一)
消息中间件是值利用高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。 通过提供消息传递和消息排队模型,可以在分布式架构下扩展进程之间的通信。
周杰伦本人
2022/10/25
1.1K0
activemq学习之activemq功能(一)
消息队列及常见消息队列介绍
曾令武
2017/09/29
51.3K6
消息队列及常见消息队列介绍
消息队列之ActiveMQ
分布式中 service之间相互调用的时候 存在耦合 比如这边添加完商品后做同步索引库处理,添加商品就是在数据库中插入一条数据,而同步索引库这个功能一般写在solr的service层里,这时候就会有出现服务间的耦合 因此我们需要一个中间商来赚差价。。 是需要一个中间件来传递信息。
周杰伦本人
2023/10/12
3030
消息队列(一)
消息队列,即MQ,是典型的生产者、消费者模型。生产者不断生成消息添加到队列中,消费者不断的从队列中获取消息。因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,这样就实现了生产者和消费者的解耦。
故里
2020/11/25
5550
相关推荐
【性能案例】Jmeter测试Apache ActiveMQ
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验