WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal网页登录认证
- 物联网开发系列:
- 物联网开发之旅① WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal验证
- 物联网开发番外篇之 Captive Portal验证原理
文章目录
- 背景
- 实现工具
- 实现细节
- 一、将无线连接共享到以太网
- 1. 配置静态IP地址
- 2. 启用IP转发
- 3. 配置NAT(网络地址转换)
- 4. 自动应用iptables规则
- 二、自动通过WiFi的登录验证
- 1. 编写登录脚本
- 2. 编写网络检查脚本
- 3. 使用`systemd`定时器
- 总结
- 参考
背景
在物联网开发中,大多数设备都是通过无线局域网进行通信的,在局域网下非常容易实现,但是有些时候我们需要在远程对物联网设备进行管理,例如在公司关掉在家忘了关掉的空调,或者在家查看公司物联网设备的工作状态,这时候就需要将局域网的设备暴露到互联网上。
最简单的方式当然是通过一根网线将局域网路由器连接到有互联网的路由器,但是有些情况下这种方法并不可行,否则就不会有本文了。
不便之处在于公司只能够提供一个WiFi连接,这就需要将无线连接获取到的互联网连接共享到局域网设备中。
另外,公司提供的无线连接通常具有captive portal功能,WiFi本身是不加密的,但是连接上之后需要通过一个账号密码进行验证才能上网。
因此要解决这个问题就要完成两个主要任务:
- 将无线连接共享到以太网
- 自动通过公司的Captive Portal认证
再次注意本文的需求,是将无线连接共享到有线网口,目前大多数网上的方案都是将以太网共享到WiFi,这没什么难度,开个热点就好了。
具体网络拓扑可以参考以下图片

实现工具
要将无线连接共享到以太网并自动通过WiFi的登录验证,我们需要选择适当的工具和方法。以下是选择这些工具的原因:
- 使用
nmcli工具:nmcli是NetworkManager的命令行接口,可以方便地管理网络连接。 - 使用
iptables进行NAT:iptables是Linux内核的包过滤系统,可以配置NAT(网络地址转换)来共享网络连接。 - 编写Shell脚本:通过编写Shell脚本,可以自动化WiFi连接和登录验证。
- 使用
systemd定时器:systemd是现代Linux系统的初始化系统和服务管理器,可以用来定时运行任务。
实现细节
一、将无线连接共享到以太网
1. 配置静态IP地址
首先,需要为以太网接口(eth0)配置一个静态IP地址,以便作为网络共享的网关。
编辑/etc/dhcpcd.conf文件:
sudo nano /etc/dhcpcd.conf
添加以下内容,为eth0配置静态IP地址:
interface eth0
static ip_address=192.168.0.1/24
static routers=
static domain_name_servers=
保存并退出编辑器,然后重启网络服务:
sudo systemctl restart dhcpcd
2. 启用IP转发
编辑/etc/sysctl.conf文件,启用IP转发:
sudo nano /etc/sysctl.conf
取消以下行的注释:
net.ipv4.ip_forward=1
使更改立即生效:
sudo sysctl -p
3. 配置NAT(网络地址转换)
配置iptables以共享无线连接到以太网:
sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
将iptables规则保存到文件中:
sudo sh -c "iptables-save > /etc/iptables.ipv4.nat"
4. 自动应用iptables规则
编辑/etc/rc.local文件,在exit 0之前添加以下内容,以便在启动时自动应用iptables规则:
sudo nano /etc/rc.local
添加以下内容:
iptables-restore < /etc/iptables.ipv4.nat
保存并退出编辑器。
小插曲:当我设置好转发之后,发现网络十分不稳定,研究之后发现是树莓派的射频功率不够,导致无线连接不稳定。改进方法有两个,一是给树莓派连接外置天线,可以参考这个视频(有点硬核)。我图省事就选了另一种方法,买个USB无线网卡(建议买免驱动的,省事)。
二、自动通过WiFi的登录验证
关于WiFi的Captive Portal认证功能,可以点击这里了解更多。
要让树莓派自动通过Captive Portal的登录认证,主要思想是抓取一个登录界面的数据包进行分析,将点击登陆时提交的账号密码的过程替换成脚本自动提交。
编写一个自动登录脚本,包含自动连接WiFi,自动提交登录账号密码,检查登录结果。
在系统上电初始化完成后运行登录脚本完成登录,同时运行一个30s的定时任务检查互联网连接是否正常,如不正常则运行一次登录脚本。
1. 编写登录脚本
创建一个名为login.sh的脚本,用于连接到WiFi并通过登录验证:
nano /home/pi/auto_login/login.sh
添加以下内容:
#!/bin/bash# 连接到WiFi网络
sudo nmcli device wifi connect 'Your SSID'# 等待连接建立
sleep 5# 检查WiFi连接状态
nmcli device status# 检查IP地址
ip addr show wlan0# 提交登录表单并输出详细信息
curl -X POST https://[your login domain] \-d "username=[your account]" \-d "password=[your password]" \-d "buttonClicked=4" \-d "redirect_url=" \-d "err_flag=0" \-d "info_flag=0" \-d "info_msg=0" \-v# 检查登录结果
curl -I http://github.com
保存并退出编辑器,然后使脚本可执行:
chmod +x /home/pi/auto_login/login.sh
2. 编写网络检查脚本
创建一个名为network_check.sh的脚本,用于定期检查网络连接状态:
nano /home/pi/auto_login/network_check.sh
添加以下内容:
#!/bin/bashLOGFILE="/var/log/network-reconnect.log"
TARGET="http://github.com" # 注意选择合适的网站,我选择http://www.baidu.com的时候就会获取到不能用的IP导致系统误以为网络没连接上while true; doecho "$(date): Checking network connectivity..." >> $LOGFILE# 检查网络连接状态if ! ping -c 1 -W 1 github.com > /dev/null; thenecho "$(date): Network is down or unable to access internet, running login script..." >> $LOGFILE/home/pi/auto_login/login.sh >> $LOGFILE 2>&1elseecho "$(date): Network is up and internet is accessible." >> $LOGFILEfi# 等待 30 秒sleep 30
done
保存并退出编辑器,然后使脚本可执行:
chmod +x /home/pi/auto_login/network_check.sh
3. 使用systemd定时器
创建一个systemd服务文件:
sudo nano /etc/systemd/system/network_check.service
添加以下内容:
[Unit]
Description=Network Check Script[Service]
Type=simple
ExecStart=/home/pi/auto_login/network_check.sh
保存并退出编辑器。
创建一个systemd定时器文件:
sudo nano /etc/systemd/system/network_check.timer
添加以下内容:
[Unit]
Description=Run Network Check Script every 30 seconds[Timer]
OnBootSec=30s
OnUnitActiveSec=30s
Unit=network_check.service[Install]
WantedBy=timers.target
保存并退出编辑器。
重新加载systemd配置,并启用和启动定时器:
sudo systemctl daemon-reload
sudo systemctl enable network_check.timer
sudo systemctl start network_check.timer
总结
本文分享了使用树莓派将WiFi连接的互联网共享至以太网,并且通过脚本实现登录界面的自动认证。
希望这篇博客能帮助到你。如果你有任何问题或需要进一步帮助,请在评论区留言。
参考
https://blog.csdn.net/weixin_45501411/article/details/103772070
相关文章:
WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal网页登录认证
物联网开发系列:物联网开发之旅① WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal验证物联网开发番外篇之 Captive Portal验证原理 文章目录 背景实现工具实现细节一、将无线连接共享到以太网1. 配置静态IP地址2. 启用IP转发3…...
【神软大数据治理平台-高级动态SQL(接口开发)】
1、背景 业务部门需大数据平台按照所提需求提供企业数据接口,基于神软大数据治理平台-高级动态SQL功能,满足业务需求,如下: (1)业务系统需求: 输入: enterpriseName:…...
【Java数据结构】Map和Set超详细两万字讲解(内含搜索树+哈希表)
🔒文章目录: 1.❤️❤️前言~🥳🎉🎉🎉 2. Map和Set的基础概念 3.Map的基础使用 4.Set的基础使用 5. TreeMap的本质——红黑树 5.1二叉搜索树的概念 5.2二叉搜索树的模拟实现 二叉搜索树——查找 二…...
中国制造2025,会抛弃精益生产吗?
时至今日,“精益生产”模式依旧大行其道,它始终支持着中国制造业以最低的成本做出优质产品。我们认为,纵然是中国制造2025成为现实,精益生产模式也仍然是整个制造业的精髓之一。 首先,精益生产模式最重要的一根脊梁就是…...
Rust 循环
Rust 循环 在编程语言中,循环是一种重要的控制结构,它允许我们重复执行一段代码直到满足特定的条件。Rust 语言提供了多种循环方式,每种方式都有其特定的用途和语法。本文将详细介绍 Rust 中的循环,包括 loop、while、while let、…...
数据结构(其四)--特殊矩阵的存储
目录 11.特殊矩阵的压缩存储 (1).一维数组的储存结构 (2).二维数组的存储结构 (3).普通矩阵的存储 (4).特殊矩阵的压缩存储 i.对称矩阵 ii.三角矩阵 iii.三对角矩阵 iiii.稀疏矩…...
系统化学习 H264视频编码(06)哥伦布编码
说明:我们参考黄金圈学习法(什么是黄金圈法则?->模型 黄金圈法则,本文使用:why-what)来学习音H264视频编码。本系列文章侧重于理解视频编码的知识体系和实践方法,理论方面会更多地讲清楚 音视频中概念的…...
手机在网状态接口如何对接?(一)
一、什么是手机在网状态? 传入手机号码,查询该手机号的在网状态,返回内容有正常使用、停机、在网但不可用、不在网(销号/未启用/异常)、预销户等多种状态。 二、手机在网状态使用场景? 1.信贷审核&#…...
数据结构链表2(常考习题1)(C语言)
移除链表元素: . - 力扣(LeetCode) 题目: 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 解题思路: 情况1: 情…...
Rust的运行时多态
Rust的运行时多态 Rust的静态多态即编译时多态,通过**泛型特征约束(Generic Type Trait Constrait)**来实现; 那么动态多态(运行时多态)呢?答案是特征对象(Trait Objectÿ…...
sqllabs通关
sqllabs5:(报错注入) ?id1 回显You are in........... ?id2-1 回显You are in........... ?id1 回显 1 LIMIT 0,1 判断是字符型,闭合。?id1order by 3-- //页面显示正常我们试了4行得出是报错注入 我们先爆库名 http://127.0.0.1/sqli-labs-master/L…...
RTSP系列四:RTSP Server/Client实战项目
RTSP系列: RTSP系列一:RTSP协议介绍-CSDN博客 RTSP系列二:RTSP协议鉴权-CSDN博客 RTSP系列三:RTP协议介绍-CSDN博客 RTSP系列四:RTSP Server/Client实战项目-CSDN博客 目录 一、RTSP Server实战项目 1、准备 2、…...
sqli-labs-php7-master第11-16关
猜注入点 先来猜数字型 单引号字符型: 发现注入点找到了 猜测数据库有多少个字段: 1’ order by 4 # 密码随便输的。 这里没有使用--注释,因为没作用,可能是过滤掉了 继续猜。刚才没猜对 1 order by 2 # 没报错,猜…...
c++初阶 string的底层实现
string 基础函数成员成员变量构造函数析构函数:拷贝构造赋值构造 遍历下标访问迭代器 增删插开辟空间push_backappendinserterase 功能函数swapfindc_strsubstrclear 其他函数比较函数流提取<<流插入>>getline 完整版 声明:非纯手搓…...
微信小程序实现上传照片功能
案例: html: <view class"zhengjianCont fontSize30" style"margin-bottom: 40rpx;"><view class"kuai"><image binderror"imageOnloadError" bind:tap"upladPhoto" data-params"business…...
lombok安装成功但是找不到方法
2024.1.1版本的IDE的插件安装了默认的lombok(如图1),pom文件中也引入了lombok的依赖,在实体类写了Data的注解,当调用实体类的get和set方法运行时,报错找不到相应的方法,但是在调用get、set方法的…...
单细胞Seurat的umi矩阵-与feature、counts(用于质控)
目录 关于umi矩阵学习 用umi计算feature、counts值 ①meta数据查看 ②Count和Feature计算(生成Seurat时自动计算) 1)提取UMI矩阵 2)计算 其他指标 评估质量指标(重点) 1)UMI计数 2)基因计数 3)UMIs vs. genes detected 4)线粒体计数比率 5)综合过滤 过…...
安防视频监控EasyCVR视频汇聚平台设备发送了GPS位置,但是订阅轨迹为空是什么原因?
安防视频监控EasyCVR视频汇聚平台兼容性强、支持灵活拓展,平台可提供视频远程监控、录像、存储与回放、视频转码、视频快照、告警、云台控制、语音对讲、GIS地图、轨迹跟踪、平台级联等视频能力。 用户描述,设备在电子地图中可以查看到定位信息ÿ…...
在 VueJS 中使用事件委托处理点击事件(事件委托,vue事件委托,什么是事件委托,什么是vue的事件委托)
前言 在开发 Vue 项目时,我们经常需要处理大量的点击事件。为每个可点击的元素单独添加事件监听器不仅会增加代码的复杂度,还会降低性能。事件委托是一种有效的优化方式,它可以显著减少事件监听器的数量,提高代码的可维护性和执行…...
密码学简史:时间密语
注:机翻,未校。 A brief history of cryptography: Sending secret messages throughout time Stemming from the Greek words for “hidden writing,” cryptography is the practice of encrypting transmitted information so that it can only b…...
别再手动点啦!用Android无障碍服务+讯飞语音,5分钟实现App语音操控(保姆级教程)
用Android无障碍服务打造语音操控神器:5分钟实现"可见即可说" 你是否厌倦了在手机上反复点击屏幕的操作?想象一下,只需对着手机说出"打开微信"、"点击朋友圈"、"返回主页",设备就能自动完…...
保姆级教程:用mintar版imu_utils搞定ZED2/Realsense相机内置IMU标定(避坑kalibr_allan)
保姆级教程:用mintar版imu_utils完成ZED2/Realsense相机IMU标定实战指南 当你在视觉惯性里程计(VIO)项目中遇到定位漂移问题时,很可能是因为IMU参数配置不当。与网上普遍推荐的kalibr_allan方法不同,本文将带你体验min…...
深入解析STM32与FreeRTOS内存管理:从理论到实践的最佳配置策略
1. STM32内存结构深度剖析 第一次接触STM32内存管理时,我也被那些专业术语搞得晕头转向。直到把开发板跑死机十几次后,才真正理解RAM和Flash的区别。简单来说,RAM就像你的办公桌面,随时可以读写但断电就清空;Flash则是…...
避坑指南:用高德DistrictSearch获取精准行政边界时遇到的5个典型问题(含最新GeoJson处理技巧)
高德DistrictSearch深度避坑:5个实战难题与GeoJson优化方案 当你在深夜调试地图边界数据时,突然发现某个街道的轮廓出现了诡异的锯齿状变形——这不是恐怖片情节,而是使用高德DistrictSearch时可能遇到的真实场景。作为经历过数十个地图项目…...
MedGemma-X精彩案例分享:自然语言提问触发的专业级影像分析报告
MedGemma-X精彩案例分享:自然语言提问触发的专业级影像分析报告 1. 重新定义智能影像诊断的新标杆 想象一下这样的场景:一位放射科医生面对堆积如山的X光片,只需要用自然语言问一句"这张胸片有没有肺炎迹象?"…...
从NDVI到地表温度:用ENVI Band Math一次性搞定植被与热环境分析
ENVI波段运算实战:NDVI与地表温度的高效批量处理技巧 遥感影像分析中,植被指数和地表温度是最基础却又最关键的指标。传统操作流程往往需要反复切换不同工具模块,既耗时又容易出错。而ENVI的Band Math功能就像一把瑞士军刀,能将这…...
5个维度深度评估:哪款内容解锁工具真正值得投入时间?
5个维度深度评估:哪款内容解锁工具真正值得投入时间? 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 在数字信息时代,付费墙已成为内容获取的主要障…...
【ROS2 基础】ROS2与Colcon核心指令速查手册与避坑指南
为了在 ROS2 的日常开发中提升效率,本文为您整理了一份结构化的核心指令速查清单。去除了冗长的理论,直击实战痛点,并附带了多平台差异、性能优化数据以及常见报错的修复方案。 文章目录[TOC]一、 快速入门:3步跑通基础流程二、 版…...
Qwerty Learner字体优化:提升阅读体验的细节处理
Qwerty Learner字体优化:提升阅读体验的细节处理 【免费下载链接】qwerty-learner 为键盘工作者设计的单词记忆与英语肌肉记忆锻炼软件 / Words learning and English muscle memory training software designed for keyboard workers 项目地址: https://gitcode.…...
突破网盘限制:高效下载的终极解决方案——网盘直链下载助手完全指南
突破网盘限制:高效下载的终极解决方案——网盘直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移…...
