实际环境:
在普通场景下我们是无法登陆路由器管理界面查看树莓派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=CNctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=1#手机热点network={ssid="vivo Y66" #wifi名字psk="liuww123"#wifi密码key_mgmt=WPA-PSKpriority=2 #连接优先级,数字越大优先级越高(不可以是负数 }#本地wifinetwork={ssid="SZP" #wifi名字psk="sssssss"#wifi密码key_mgmt=WPA-PSKpriority=2 #连接优先级,数字越大优先级越高(不可以是负数 }###### 扩展参数解释network={ssid="WiFi-B"psk="12345678"key_mgmt=WPA-PSKpriority=2scan_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=1network={ssid="wo_shi_yige_wifi_ssid"scan_ssid=1psk="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:网络的ssidpsk:密码priority:连接优先级,越大越优先scan_ssid:连接隐藏WiFi时需要指定该值为1
第二步:
修改/etc/network/interfaces使用wpa_supplicant.conf来配置无线网络
auto loiface lo inet loopbackauto eth0iface eth0 inet dhcpallow-hotplug wlan0auto wlan0iface wlan0 inet dhcppre-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和对应密码写上就行了。
其他方式设置见:/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 sysSMTPserver=""Sender="自己的163账号@" #写自己的163账号password="密码" #写自己的邮箱密码#类容ip=str(sys.argv)tet=ipprint (tet)msg=MIMEText(tet, 'plain', 'utf-8') #标题msg["Subject"]=Header(u'树莓派IP', 'utf-8').encode()#发件人msg["From"]=Sender #收件人,msg["to"]="自己的163账号@"#也写自己的邮箱账号mailserver=smtplib.SMTP(SMTPserver,25) try:#登录邮箱mailserver.login(Sender,password) #发送邮件mailserver.sendmail(Sender,["自己的163账号@"],msg.as_string()) #也写自己的邮箱账号mailserver.quit() print ("邮件发送成功!")except smtplib.SMTPException:print ("error:邮件发送失败!")
再写shell脚本来判断网络连通性/root/ping.sh,并发送邮件到自己邮箱
#!/bin/bashwhile :doping -c 2 &>/dev/null[ $? -eq 0 ] && breakdonea=`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用户‘