Python实现树莓派开机自动获取IP并发送至邮箱
针对树莓派无显示器且需移动使用的场景,本文介绍如何使用Python脚本在开机后自动获取本机IP地址,并通过SMTP协议发送至指定邮箱。内容涵盖网络接口遍历、IP提取、邮件发送函数实现,以及通过修改/etc/profile实现脚本开机自启的完整配置步骤,帮助开发者便捷管理远程设备网络状态。
由于树莓派通常不连接显示器,且为了避免设置固定IP带来的不便(因为设备需要随身携带,不同网络环境的网段可能不同),本文旨在通过Python编写一个脚本,实现树莓派开机后自动获取本机IP,并自动发送到指定的邮箱地址。(完整源码)
第一步是获取所有连接的网络接口,例如有线网卡和Wi-Fi接口等。
def get_ip_address():
#先获取所有网络接口
SIOCGIFCONF = 0x8912
SIOCGIFADDR = 0x8915
BYTES = 4096
sck = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
names = array.array('B',b'\0' * BYTES)
bytelen = struct.unpack('iL', fcntl.ioctl(sck.fileno(), SIOCGIFCONF, struct.pack('iL', BYTES, names.buffer_info()[0])))[0]
namestr = names.tostring()
ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, bytelen, 32)]
#再获取每个接口的IP地址
iplist = []
for ifname in ifaces:
ip = socket.inet_ntoa(fcntl.ioctl(sck.fileno(),SIOCGIFADDR,struct.pack('256s',ifname[:15]))[20:24])
iplist.append(ifname+':'+ip)
return iplist
第二步是将获取到的IP地址通过邮件发送到指定的邮箱地址。
def ip_send_mail(iptxt):
#设置收件邮箱
toaddrs = 'to@mail.com'
#设置发送邮箱
fromaddr = 'send@mail.com'
#设置发送邮箱的账号密码
username = 'your_sendmail@mail.com'
password = 'your_pass'
#设置SMTP服务器、端口,根据你的邮箱设置,
server = smtplib.SMTP('smtp.mail.com:25')
#设置邮件正文,get_ip_address()返回的是list,要转换成str
ip = '\r\n'.join(iptxt)
#设置邮件标题和正文
msg = MIMEText(ip,'plain', 'utf-8')
msg['Subject'] = 'IP For RaspberryPi'
msg['From'] = fromaddr
msg['To'] = toaddrs
#启动SMTP发送邮件
server.ehlo()
server.starttls()
server.login(username,password)
server.sendmail(fromaddr, toaddrs, msg.as_string())
server.quit()
第三步是调用上述定义的函数来执行整个流程。
if __name__ == '__main__': #获取IP iptxt = get_ip_address() #将IP存入文件,如果直接发送邮件,这步可以省略。 ip_save_file(iptxt) #将IP地址发送到指定邮箱 ip_send_mail(iptxt)
第四步是配置系统,使脚本在开机时自动运行。
将上述所有代码整合到一个文件中,并将该文件放置在树莓派的存储卡中,例如路径:/home/pi/get_ip_address.py
接下来,需要给Python脚本赋予可执行权限。
sudo chmod +x get_ip_address.py
最后,设置系统在启动时运行该脚本。
sudo vi /etc/profile
编辑profile文件,在文件的最后部分,即fi语句之前,添加以下代码:
python /home/pi/get_ip_address.py
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









