WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal网页登录认证

news2024/9/23 9:24:49

  • 物联网开发系列:
  • 物联网开发之旅① WiFi to Ethernet: 树莓派共享无线连接至有线网口,自动通过Captive Poartal验证
  • 物联网开发番外篇之 Captive Portal验证原理

文章目录

  • 背景
  • 实现工具
  • 实现细节
    • 一、将无线连接共享到以太网
      • 1. 配置静态IP地址
      • 2. 启用IP转发
      • 3. 配置NAT(网络地址转换)
      • 4. 自动应用iptables规则
    • 二、自动通过WiFi的登录验证
      • 1. 编写登录脚本
      • 2. 编写网络检查脚本
      • 3. 使用`systemd`定时器
  • 总结
  • 参考

背景

在物联网开发中,大多数设备都是通过无线局域网进行通信的,在局域网下非常容易实现,但是有些时候我们需要在远程对物联网设备进行管理,例如在公司关掉在家忘了关掉的空调,或者在家查看公司物联网设备的工作状态,这时候就需要将局域网的设备暴露到互联网上。

最简单的方式当然是通过一根网线将局域网路由器连接到有互联网的路由器,但是有些情况下这种方法并不可行,否则就不会有本文了。

不便之处在于公司只能够提供一个WiFi连接,这就需要将无线连接获取到的互联网连接共享到局域网设备中。

另外,公司提供的无线连接通常具有captive portal功能,WiFi本身是不加密的,但是连接上之后需要通过一个账号密码进行验证才能上网。

因此要解决这个问题就要完成两个主要任务:

  1. 将无线连接共享到以太网
  2. 自动通过公司的Captive Portal认证

再次注意本文的需求,是将无线连接共享到有线网口,目前大多数网上的方案都是将以太网共享到WiFi,这没什么难度,开个热点就好了。

具体网络拓扑可以参考以下图片

在这里插入图片描述

实现工具

要将无线连接共享到以太网并自动通过WiFi的登录验证,我们需要选择适当的工具和方法。以下是选择这些工具的原因:

  1. 使用nmcli工具nmcli是NetworkManager的命令行接口,可以方便地管理网络连接。
  2. 使用iptables进行NATiptables是Linux内核的包过滤系统,可以配置NAT(网络地址转换)来共享网络连接。
  3. 编写Shell脚本:通过编写Shell脚本,可以自动化WiFi连接和登录验证。
  4. 使用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/bash

LOGFILE="/var/log/network-reconnect.log"
TARGET="http://github.com" # 注意选择合适的网站,我选择http://www.baidu.com的时候就会获取到不能用的IP导致系统误以为网络没连接上

while true; do
    echo "$(date): Checking network connectivity..." >> $LOGFILE

    # 检查网络连接状态
    if ! ping -c 1 -W 1 github.com > /dev/null; then
        echo "$(date): Network is down or unable to access internet, running login script..." >> $LOGFILE
        /home/pi/auto_login/login.sh >> $LOGFILE 2>&1
    else
        echo "$(date): Network is up and internet is accessible." >> $LOGFILE
    fi

    # 等待 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1982230.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chainlit快速实现AI对话应用的聊天记录如何持久性保存

前言 Chainlit 可以设置聊天记录用户搜索和浏览过去的对话。 如何实现 要启用聊天历史记录,您需要启用: 数据持久性身份验证恢复对话 为了让用户继续持久对话,请使用cl.on_chat_resume 生命周期钩子 装饰器使用户能够继续对话。需要同时启用数据持久性和身份验证。 该…

day21(mysql用户创建与授权、角色创建)

1.环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf [rootmysql ~]# yum -y remove mariadb //移除mariadb [rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留 文件 2.安装绿色mysql [rootmysql ~]# t…

安装svd模型

svd模型简介 Stable Video Diffusion模型基于潜在的视频扩散模型&#xff0c;通过在小型、高质量的视频数据集上插入时间层并进行微调&#xff0c;将传统的2D图像合成模型转化为生成视频模型。这种方法的优点在于&#xff0c;它能够生成高分辨率的视频&#xff0c;并且具有强大…

C++基础编程100题-034 OpenJudge-1.4-15 最大数输出

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0104/15/ 描述 输入三个整数,输出最大的数。 输入 输入为一行&#xff0c;包含三个整数&#xff0c;数与数之间以一个空格分开。 输出 输出一行&#xff0c;包含一个整数&#xff0c;即最大的整数。 样例…

【AI】关于AI和手机

2011 年至2015 年期间&#xff0c;全球智能手机出货量年增长率均超过两位数&#xff0c;显示出强劲的市场需 求和快速扩张趋势。然而&#xff0c;自2016 年起&#xff0c;全球智能手机用户数量趋于饱和&#xff0c;换机周期也逐 渐变长&#xff0c;市场进入存量替换阶段&#x…

人工智能时代,程序员如何保持核心竞争力?

人工智能时代&#xff0c;程序员如何保持核心竞争力&#xff1f; 随着AIGC&#xff08;如chatgpt、midjourney、claude等&#xff09;大语言模型接二连三的涌现&#xff0c;AI辅助编程工具日益普及&#xff0c;程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工…

FreeRTOS基础入门——RTOS背景知识简介(一)

个人名片&#xff1a; &#x1f393;作者简介&#xff1a;嵌入式领域优质创作者&#x1f310;个人主页&#xff1a;妄北y &#x1f4de;个人QQ&#xff1a;2061314755 &#x1f48c;个人邮箱&#xff1a;[mailto:2061314755qq.com] &#x1f4f1;个人微信&#xff1a;Vir2025WB…

必备:2024年四大文件翻译神器盘点!

在现代社会&#xff0c;语言不再是交流的障碍&#xff0c;文件翻译工具的出现&#xff0c;让不同语言之间的信息传递变得轻松自如。以下是几款备受推崇的文件翻译工具&#xff0c;它们将助大家轻松应对各种语言挑战&#xff0c;提升工作效率。 在当今的职场环境中&#xff0c;…

有没有性价比高的蓝牙耳机推荐?盘点4款开放式耳机排行榜10强

那当然是开放式蓝牙耳机性价比高呀&#xff0c;说到开放式蓝牙耳机的性价比呢&#xff0c;那我们可以先了解它的价位&#xff0c;它的价位大致可以分为三个价位。 低价位区间&#xff08;499元以下&#xff09;&#xff1a; 这个价格区间的开放式耳机通常受成本限制&#xff…

使用Step Functions运行AWS Backup时必备的权限要点

引言 在尝试从Step Functions执行AWS Backup的按需备份时&#xff0c;我在权限方面遇到了一些困难。为了备忘&#xff0c;我将这些经验写成这篇文章。 概述 从Step Functions执行AWS Backup时&#xff0c;需要分配以下权限&#xff1a; AWS Backup相关权限 执行备份的权限…

培训第二十一天(mysql用户创建与授权、角色创建)

上午 1、环境准备 [rootmysql ~]# rm -rf /etc/my.cnf //清空/etc目录下的my.cnf[rootmysql ~]# yum -y remove mariadb //移除mariadb[rootmysql ~]# find / -name "*mysql*" -exec rm -rf {} \; //删除mysql所有遗留文件 2、安装mysql绿包 [rootmysql ~]…

c->c++(四):gtest

本文主要探讨gtest相关内容。 gtest安装 wget -O gtest.zip https://github.com/google/googletest/archive/refs/heads/main.zipunzip gtest.zipcd googletest-mainmkdir bulid && cd buildcmake .. && make && make install gtest API TEST/TEST…

MySQL update set语句中 逗号与and的区别

语法 以下是 UPDATE 命令修改 MySQL 数据表数据的通用 SQL 语法&#xff1a; UPDATE table_name SET column1 value1, column2 value2, ... WHERE condition; 参数说明&#xff1a; table_name 是你要更新数据的表的名称。column1, column2, ... 是你要更新的列的名称。v…

减速电机的减速比计算原理

今天因为看到减速电机的内部中有通过齿轮来增加扭矩的结构&#xff0c;想找点原理性的文章来看一下&#xff0c;奈何遍寻不得。故提笔于此记录&#xff0c;以备往后回看。 图1 减速电机的竖截面剖视图 减速比为64&#xff0c;我的理解是在初始的齿轮转一圈的时候&#xff0c;最…

单片机配网,继电器开关,广播

&#x1f3c6;本文收录于《CSDN问答解惑-专业版》专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收…

qt安装图文

1.下载 通过百度网盘分享的文件&#xff1a;qt安装图文 链接&#xff1a;https://pan.baidu.com/s/1lQtYYvuybibDkdrMlpKJOg 提取码&#xff1a;11u7 --来自百度网盘超级会员V3的分享 2.安装

C++ 几何算法 - 向量点乘,叉乘及其应用

一&#xff1a;点乘介绍 1. 向量点乘&#xff1a; 2. 向量点乘的性质&#xff1a; 3. 向量点乘公式&#xff1a; 4. 向量的点乘的属性&#xff1a; &#xff08;1&#xff09;&#xff1a;向量与自身做点乘&#xff0c;会得到向量长度的平方&#xff1a; &#xff08;2&#xf…

JVM系列 | 对象的消亡3——垃圾收集器的对比与实现细节

垃圾收集器 文章目录 各收集器简单对比收集器启动参数各收集器详细说明JDK 1.3 之前JDK 1.3 | SerialJDK 1.4 | ParNewJDK 1.4 | Parallel ScavengeJDK 5 | CMS 收集器JDK 7 | G1 各收集器简单对比 收集器名称出现时间淘汰时间目标采用技术线程数STW分代备注无名JDK 1.3之前JD…

Android 自定义View(一):View是什么?如何创建自定义view,自定义属性等

目录 1&#xff09;View是什么&#xff1f; 2&#xff09;View分类 3&#xff09;View的知识点 4&#xff09;View的工作流程是怎么样的&#xff1f; 5&#xff09;案例&#xff1a;如何自定义View&#xff1f;比如我们要实现一个输入框带有清除按钮的view 6&#xff09;疑问&…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 免单统计(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM金牌🏅️团队| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 🍿 最新华为OD机试D卷目录,全、新、准,题目覆盖率达 95% 以上,支持题…