【车联网原型系统|四】adhoc组网+frp内网穿透

2023-11-19


物联网原型系统导航

【车联网原型系统|一】项目介绍+需求分析+概要设计 https://blog.csdn.net/weixin_46291251/article/details/125807297

【车联网原型系统|二】数据库+应用层协议设计 https://blog.csdn.net/weixin_46291251/article/details/125808107

【车联网原型系统|三】树莓派设计+模拟基站程序 https://blog.csdn.net/weixin_46291251/article/details/125808229

【车联网原型系统|四】adhoc组网+frp内网穿透 https://blog.csdn.net/weixin_46291251/article/details/125808621

【车联网原型系统|五】前后端分离 https://blog.csdn.net/weixin_46291251/article/details/125808674

【车联网原型系统|六】效果展示 https://blog.csdn.net/weixin_46291251/article/details/125808845

【源码下载】 https://download.csdn.net/download/weixin_46291251/86227197


【车联网原型系统|四】adhoc组网+frp内网穿透

ad-hoc组网

小车树莓派与基站(电脑)间通过wifi连接,当小车树莓派连接不到基站(电脑)时,尝试与其他小车树莓派通过ad-hoc方式连接,进行数据传输。

img

概述

Ad-Hoc(点对点)模式:ad-hoc模式就和以前的直连双绞线概念一样,是P2P的连接。Ad Hoc结构是一种省去了无线中介设备AP而搭建起来的对等网络结构,只要安装了无线网卡,计算机彼此之间即可实现无线互联;其原理是网络中的一台计算机主机建立点到点连接,相当于虚拟AP,而其他计算机就可以直接通过这个点对点连接进行网络互联与共享。

Ad hoc网络是一种特殊的无线移动网络。网络中所有结点的地位平等,无需设置任何的中心控制结点。网络中的结点不仅具有普通移动终端所需的功能,而且具有报文转发能力。

Ad-hoc具有以下特点:

  • 无中心:Ad hoc网络没有严格的控制中心。所有结点的地位平等,即是一个对等式网络。结点可以随时加入和离开网络。任何结点的故障不会影响整个网络的运行,具有很强的抗毁性。

  • 自组织:网络的布设或展开无需依赖于任何预设的网络设施。结点通过分层协议和分布式算法协调各自的行为,结点开机后就可以快速、自动地组成一个独立的网络。

  • 多跳路由:当结点要与其覆盖范围之外的结点进行通信时,需要中间结点的多跳转发。与固定网络的多跳不同,Ad hoc网络中的多跳路由是由普通的网络结点完成的,而不是由专用的路由设备(如路由器)完成的

  • 动态拓扑:Ad hoc网络是一个动态的网络。网络结点可以随处移动,也可以随时开机和关机,这些都会使网络的拓扑结构随时发生变化。 这些特点使得Ad hoc网络在体系结构网络组织、协议设计等方面都与普通的蜂窝移动通信网络和固定通信网络有着显著的区别。

配置

Linux & Raspbian PI OS

修改配置文件 /etc/network/interfaces,将内容修改为下述内容,小车启动该配置文件时将会自动修改网卡的相关配置,包括 静态IP模式,Ad-hoc的地址,网关,

# sudo vim /etc/network/interfaces
auto wlan0  #不一定是wlan0,看具体网卡name
iface wlan0 inet static
address 10.0.0.1 #小车1
#address 10.0.0.2 #小车2
#address 10.0.0.3 #小车3
netmask 255.255.255.0 
wireless-essid rxy-adhoc
wireless-mode ad-hoc
wireless-channel 11

三个主机上的配置修改要相互照应,例如设置相同的essid确保ad-hoc的标识一致,主机之间可以彼此之间确定要建立Ad-hoc的对象;

网卡设置为ad-hoc模式,默认的网卡模式为managed,该模式下网卡可以正常连接wifi网络,在ad-hoc模式下,网卡将不再能够直接连接wifi网络,而是通过ad-hoc直接建立和连接这样的一个点对点的多跳网络。

网卡设置信道,配置同一ad-hoc的主机设别必须在同一信道下才能实现ad-hoc的点到点通信,不同信道的频率不同;以下列出了raspberry pi 4B的默认网卡的可用信道。

sudo /etc/init.d/networking restart  #重启网络配置

设置好Ad-hoc的网络配置文件后,通过上述命令重启网络配置。linux下使用ifconfig和iwconfig进行查看是否配置成功

上述方式通过修改主机全局配置的方式设置Ad-hoc网络,如果上述方式不生效,可以采用手动配置的方式。

su root

ifconfig wlan0 down #关闭网络wlan0,看具体名称

wconfig wlan0 mode ad-hoc #ad-hoc模式

iwconfig wlan0 channel 11 #信道

iwconfig wlan0 essid rxyadhoc #ad-hoc id标识

ifconfig wlan0 up #启动网络wlan0,看具体名称

ifconfig wlan0 10.0.0.5 #地址

ifconfig wlan0 netmask 255.255.255.0 #网关

windows

windows可以实现ad-hoc,但是实际上建立的是一个无线Access Point,可以通过该ad-hoc实现流量的共享;真正意义的ad-hoc是IBSS,但是IBSS已经不再被支持,因此无法实现和树莓派建立ad-hoc网络。

但是windows上可以建立AP,通过AP实现Ad-hoc的功能。

前提是网卡必须支持承载网络功能,我们的实验使用的主机默认网卡不支持承载网络功能,我们使用了额外的支持承载网络的网卡进行配置。

netsh wlan show drivers  #查看网卡是否支持承载网络
netsh wlan set hostednetwork mode=allow ssid=rxyadhoc key=00000000  **#新建Ad-hoc网络**
netsh wlan start hostednetwork  **#启动无线发射**
netsh wlan stop hostednetwork  #关闭**

set hostednetwork建立承载网络,mode选择模式,ssid是ad-hoc的名称,key是该ad-hoc的密钥。

网络拓扑

image-20220714154602339

组网的效果图如上图所示,小车1,小车2,基站都处于Ad-hoc组网内,且它们的地址分别是10.0.0.1,10.0.0.2,10.0.0.5,Ad-hoc内通过以上地址互相访问和发送消息。我们在小车上分别部署了小车的控制程序,利用基站与小车进行交互。

另外,基站的第二张网卡和外网联通,通过互联网可以向基站发送指令,基站再通过Ad-hoc组网与小车进行交互。模拟基站上部署了Django写的联网程序的Server端,然后用户通过Client端向Server发送指令进而控制小车。

frp内网穿透

frp介绍

frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议。可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。

frp 分为服务端与客户端,前者运行在有公网 IP 的服务器上,后者运行在局域网内的设备上,服务端默认会先开放 7000 端口,然后客户端与其相连

同时客户端可以开启用于 ssh 的端口,与服务端的某个端口做映射,这样我们在终端访问服务端的端口时,会自动转发到客户端去

比如frpc.ini配置文件里的客户端端口22映射到服务器的6000端口,终端设备通过6000端口,访问内网里的22端口(ssh方式)

工作原理:

  • 服务端运行,监听一个主端口,等待客户端的连接;
  • 客户端连接到服务端的主端口,同时告诉服务端要监听的端口和转发类型;
  • 服务端fork新的进程监听客户端指定的端口;
  • 外网用户连接到客户端指定的端口,服务端通过和客户端的连接将数据转发到客户端;
  • 客户端进程再将数据转发到本地服务,从而实现内网对外暴露服务的能力。

配置服务器

这里采用的是阿里云服务器进行配置。

先编写ini配置文件,指定程序监听的端口,以及可以可以转发的端口。

[common]
bind_port = 7000
kcp_bind_port = 7000
vhost_https_port = 7001
dashboard_addr = 127.0.0.1**
dashboard_port = 7500
dashboard_user = userxxx
dashboard_pwd = passwd
log_file = ./frps.log
log_level = info
log_max_days = 3
authentication_timeout = 900
token = tokennn
allow_ports = 15000-16000
max_pool_count = 50
max_ports_per_client = 0

然后指定这个配置文件,执行服务器frps程序。

配置客户端

配置好上述服务器之后,就可以进行客户端到登陆和连接。

首先编写ini配置文件

1.[common]
2.server_addr = xxx.xxx.xxx.xxx
3.server_port = 7000
4.token = passwd
5.login_fail_exit = false
6.
7.[Raspberry-Pi-B]
8.type = tcp
9.local_ip = 127.0.0.1
10.local_port = 15102
11.remote_port = 15102
12.
13.[iot-trolley-system]
14.type = tcp
15.local_ip = 127.0.0.1
16.local_port = 15103
17.remote_port = 15103

然后运行frpc客户端程序,并指定刚才创建的ini文件运行。

连接之后效果如图:

img

客户端成功连接到服务器,现在就可以直接连接公网服务器上的端口,frp程序会自动进行转发,本地端口就可以收到来自公网的连接,从而实现了内网穿透。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【车联网原型系统|四】adhoc组网+frp内网穿透 的相关文章

随机推荐

  • 批量将xls转换成xlsx

    转载 https blog csdn net weixin 44674885 article details 88669259 1 xls和xlsx区别 xls格式 最大行数为65535 xlsx格式 最大行数为1048576 2 xls批
  • 海康、大华IpCamera RTSP地址和格式

    大家注意 我下面文章描述的都是海康老款摄像机的RTSP规则 现在新的DS 系列 摄像机型号为DS 开头的 的摄像机RTSP规则为 http blog csdn net xiejiashu article details 71786187 海
  • CentOS7编译内核

    下面记录了我在CentOS7上编译新内核的过程 背景 实验室的一台服务器上装且仅装了CentOS7 内核版本为3 10 0 327 el7 x86 64 我要在当前系统上 编译 安装内核4 1 16 搭建编译环境 sudo yum inst
  • 区块链学习笔记(六)——区块链的分类

    文章目录 一 强调 二 公有链 联盟链 私有链 1 公有链 2 联盟链 3 私有链 总结 一 强调 先做一下重复强调 区块链技术是集分布式存储 点对点传输 共识机制 加密算法 数据区块等概念于一体的新兴技术集合 二 公有链 联盟链 私有链
  • 基于ETest的航电系统通用测试平台

    随着电子技术的发展 航电系统在飞机整机中的重要性飞速提升 据统计 近年来航电系统在飞机出厂成本中的比例直线上升 航电系统研发成本已占飞机研制总成本的近30 并保持着持续扩大的趋势 测试保障作为航电产业链至关重要的一环 贯穿航空电子设备 研发
  • SpringBoot读取Resource下文件的四种方式

    SpringBoot读取Resource下文件的四种方式 1 ClassPathResource classPathResource new ClassPathResource static image a jpg InputStream
  • connect函数的用法

    作者 曾宏安 华清远见嵌入式学院讲师 在网络编程中 connect函数经常用来在套接字上初始化连接 无论是流式套接字还是数据报套接字都可以使用connect函数 但含义却不一样 下面我们分别来讨论一下 一 流式套接字 流式套接字通常使用的是
  • CSS字体样式属性(字体设置)

    font size 字号大小 font size属性用来设置字符 该属性的值有两种单位 1 相对长度单位 像素单位 px 2 绝对长度单位 使用非常少 font family 字体 font family属性用于设置字体 网页常用的字体 宋
  • 学习太极创客 — ESP8226 (十三)OTA

    视频链接 https www bilibili com video BV1L7411c7jw p 23 vd source b91967c499b23106586d7aa35af46413 资料链接 http www taichi make
  • bazel构建使用clang工具链

    最近使用clang工具构建bazel项目 官方文档给的step较为繁琐 这里暂时记录一下 以便后期可以直接去用 这里具体的规则不进行详细解释 具体看官方文档有关描述 查看预定义变量列表 使用如下命令 bazel info show make
  • 【华为OD统一考试A卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • module ‘tensorflow‘ has no attribute ‘global_variables_initializer‘(问题已解决)

    最近在学深度学习 一开始就遇到了个很狗血的问题 总会报出例如下面的这种错误 y hat tf constant 36 name y hat y tf constant 39 name y loss tf Variable y y hat 2
  • xpath通过text()方式获取div节点下的文本存在bug

    环境 scrapy1 8 python3 7 3 div块如下 div class li b l span class money 12k 20k span 经验3 5年 大专 div 用形如 x response xpath div cl
  • sparkstreamming 消费kafka(2)

    spark streaming提供了两种获取方式 一种是同storm一样 实时读取缓存到内存中 另一种是定时批量读取 这两种方式分别是 Receiver base Direct 一 Receiver base Spark官方最先提供了基于R
  • 使用Jenkins+Gitlab集成Flutter自动化打包(Android),并发布到蒲公英

    本文记录一下使用Jenkins Gitlab集成Flutter自动化打包的过程 在集成时 Jenkins和Gitlab是已经搭建好的 并且Gitlab上已经上传了Flutter项目 Jenkins自动构建打包 安装Gitlab插件 因为Je
  • Js 关于收藏本页和设置首页

  • 交换机二三层转发原理简单总结

    首先二层转发是基于MAC地址转发 三层转发基于IP地址转发 但是这并不意味着仅仅依靠IP地址就能转发 三层转发是建立在二层的基础上的 而仅仅依靠MAC地址是能够转发的 另外 由于二三层转发基于MAC地址 IP地址 FDB表 MAC地址学习
  • 2019年感:忆往昔考博岁月,看今朝花样年华

    人生的际遇谁又能说清楚 就像师范类毕业的女神梦想着当一名老师 结果却阴差阳错穿上了警服 而本应该奔波北上广深的程序员 却成为了一名大学老师 两条平行线的男女 却结为了连理 再如 一心准备中科院却因英语差一分惜败 几乎裸考的学校却可能结出果实
  • 多模态预训练模型CLIP:中文版本开放使用

    公众号原文 关注公众号 获取一手论文咨询 多模态预训练模型CLIP 中文版本开放使用 中文项目地址 https github com real brilliant chinese clip in tensorflow 01 背景 CLIP是
  • 【车联网原型系统|四】adhoc组网+frp内网穿透

    物联网原型系统导航 车联网原型系统 一 项目介绍 需求分析 概要设计 https blog csdn net weixin 46291251 article details 125807297 车联网原型系统 二 数据库 应用层协议设计 h