实际环境:
在普通场景下我们是无法登陆路由器管理界面查看树莓派ip的,我们该怎么办呢,方法是有的,先让树莓派连接我的手机热点,查看树莓派的mac地址,得到mac地址后再让树莓派连接本地wifi,我们笔记本也连接本地wifi,现在树莓派和笔记本在同一局域网,这时用nmap扫描局域网,找到mac跟树莓派mac相同的ip地址就可以了,实现自动连接wifi后就是将ip发送到163邮箱。
下面我来讲步骤
包含知识点:
自动连接wifi
如何查看自己树莓派的mac,如果在局域网用nmap扫描出自己树莓派的ip地址(mac区分)
开启ssh服务
连接成功后将ip自动发送到163邮箱
1、将刷好 Raspbian 系统的 SD 卡用电脑读取。在 boot 分区,也就是树莓派的 /boot
目录下新建 wpa_supplicant.conf 文件,按照下面的参考格式填入内容并保存 wpa_supplicant.conf 文件。
country=CN
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
#手机热点
network={
ssid="vivo Y66" #wifi名字
psk="liuww123" #wifi密码
key_mgmt=WPA-PSK
priority=2 #连接优先级,数字越大优先级越高(不可以是负数
}
#本地wifi
network={
ssid="SZP" #wifi名字
psk="sssssss" #wifi密码
key_mgmt=WPA-PSK
priority=2 #连接优先级,数字越大优先级越高(不可以是负数
}
###### 扩展参数解释
network={
ssid="WiFi-B"
psk="12345678"
key_mgmt=WPA-PSK
priority=2
scan_ssid=1 #连接隐藏WiFi时需要指定该值为1
}
如果你的 WiFi 没有密码
|
如果你的 WiFi 使用WEP加密
|
|
如果你的 WiFi 使用WPA/WPA2加密
|
如果你不清楚 WiFi 的加密模式,可以在安卓手机上用 root explorer 打开 /data/misc/wifi/wpa/wpa_supplicant.conf
,查看 WiFi 的信息。
2、开启ssh服务
同样在/boot 下创建名为ssh的空文件,没有扩展名
3、启动树莓派后查看手机热点状态
4、手机关闭热点,让树莓派连接本地wifi,在同一局域网情况下,笔记本利用VMware开启centos虚拟机,网路使用桥接模式
5、在centos下用nmap扫描局域网主机
nmap -sP 172.16.15.0/24 | grep -i -B 2 "b8:27:eb:05:0c:2c"
参数解释 : -i 不区分大小写
-B 2 :输出匹配行前面2行(包含匹配行)
6、用ssh连接到树莓派
树莓派默认账号密码
账号:pi
密码:raspberry
7、修改root用户密码然后以超级管理员登录
sudo passwd root
su - root
8、简单吧,那我们扩展一下,让以后都自动连接多个WiFi网络
多个wifi连接方法
注意:/etc/wpa_supplicant/wpa_supplicant.conf 就是我们在/boot目录下创建的文件,启动后/boot 下的那个文件就被删除了,取而代之是现在编辑的文件
第一步:
-
修改/etc/wpa_supplicant/wpa_supplicant.conf,下面是我使用的配置文件:
ctrl_interface=/var/run/wpa_supplicant #ap_scan=1 network={ ssid="wo_shi_yige_wifi_ssid" scan_ssid=1 psk="wo_shi_mi_ma" priority=5 } network={ ssid="pi" psk="onlyforpi" priority=1 }
- **ap_scan:**1是默认值,因此我注掉了
- 1:这个模式下总是先连接可见的WiFi,如果扫描完所有可见的网络之后都没有连接上,则开始连接隐藏WiFi。
- 2:会按照network定义的顺序连接WiFi网络,遇到隐藏的将立刻开始连接,因此在这个模式下连接顺序不受priority影响
- ctrl_interface:这个文件夹里面存的是一个当前使用的interface的socket文件,可以供其他程序使用读取WiFi状态信息
- network:是一个连接一个WiFi网络的配置,可以有多个,wpa_supplicant会按照priority指定的优先级(数字越大越先连接)来连接,当然,在这个列表里面隐藏WiFi不受priority的影响,隐藏WiFi总是在可见WiFi不能连接时才开始连接。
- ssid:网络的ssid
- psk:密码
- priority:连接优先级,越大越优先
- scan_ssid:连接隐藏WiFi时需要指定该值为1
- **ap_scan:**1是默认值,因此我注掉了
第二步:
-
修改/etc/network/interfaces使用wpa_supplicant.conf来配置无线网络
auto lo iface lo inet loopback auto eth0 iface eth0 inet dhcp allow-hotplug wlan0 auto wlan0 iface wlan0 inet dhcp pre-up wpa_supplicant -Dwext -i wlan0 -c /etc/wpa_supplicant/wpa_supplicant.conf -B
以后每次启动时,树莓派都会主动去连接配置文件中预定义的这些wifi网络。
单个wifi连接可以使用以下方法
修改/etc/network/interfaces文件,把它修改成这个样子
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
allow-hotplug wlan0
auto wlan0
iface wlan0 inet dhcp
wpa-ssid wifi名字
wpa-psk wifi密码
主要是添加wpa-ssid和wpa-psk,直接把你要连接的wifi的ssid和对应密码写上就行了。
其他方式设置见:https://www.cnblogs.com/playboysnow/p/4987103.html
9、再扩展一下,我们每次不可能获得ip都一样,所以当连接成功后将ip发送到163邮箱。
注意:请使用python3来运行我的脚本
第一步:在/root目录下创建163.py脚本 /root/163.py
# -*-coding:utf-8-*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
import sys
SMTPserver="smtp.163.com"
Sender="自己的163账号@163.com" #写自己的163账号
password="密码" #写自己的邮箱密码
#类容
ip=str(sys.argv)
tet=ip
print (tet)
msg=MIMEText(tet, 'plain', 'utf-8')
#标题
msg["Subject"]=Header(u'树莓派IP', 'utf-8').encode()
#发件人
msg["From"]=Sender
#收件人,
msg["to"]="自己的163账号@163.com" #也写自己的邮箱账号
mailserver=smtplib.SMTP(SMTPserver,25)
try:
#登录邮箱
mailserver.login(Sender,password)
#发送邮件
mailserver.sendmail(Sender,["自己的163账号@163.com"],msg.as_string()) #也写自己的邮箱账号
mailserver.quit()
print ("邮件发送成功!")
except smtplib.SMTPException:
print ("error:邮件发送失败!")
再写shell脚本来判断网络连通性/root/ping.sh,并发送邮件到自己邮箱
#!/bin/bash
while :
do
ping -c 2 www.baidu.com &>/dev/null
[ $? -eq 0 ] && break
done
a=`ifconfig wlan0 | grep broadcast`
python3 /root/163.py "wlan0:$a"
echo "ok"
10、最后就是将脚本加入开启自启程序/etc/rc.local
在exit 0 之前加入如下代码,没有exit就直接加到后面就行
bash /root/ping.sh
测试:
直接拔电源让树莓派重连wifi,看效果
手机端app查看
然后用ssh连接树莓派好像只能先用pi登录,然后才能切换root用户‘