无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 9263|回复: 2
打印 上一主题 下一主题

树莓派DHCP 发送wlan0 IP

[复制链接]
跳转到指定楼层
1#
发表于 2019-5-25 11:59:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
硬件:树莓派 3B+
系统:fedora server 30 (Fedora-Server-armhfp-30-1.2-sda.raw)

需求原因:
考虑到带树莓派往返公司和家,网络ip段布局不同,故设置树莓派开机后通过 wlan0 使用DHCP 动态获取IP。
但这样可能无法知道当前的ip地址,无法远程连接。
故采取开机后自动执行脚本,发送当前ip到其他服务器,或发送邮件方式。
树莓派启动慢,急性的人,可以在未接显示器的情况下获取ip地址。

一.发送邮件方式:
这个比较方便,不用依赖其他服务器。

1.系统默认无法使用mail命令,需要安装sendmail 和 mailx,并开启服务

  1. dnf install sendmail mailx
  2. chkconfig sendmail on
  3. service sendmail restart
复制代码


2.使用脚本

[root@raspberry ~]# cat ip.sh

  1. mail1="test@qq.com"

  2. #ip=$(ifconfig wlan0 | grep -B 2 'b8:27:eb:e4:0e:8c' | head -1 |cut -d ' ' -f10)
  3. ip=$(ifconfig wlan0 |grep 'inet [0-9]\{1,3\}\.'|cut -d ' ' -f10)

  4. if [ "$ip" = '' ];then
  5.    ip='Not find wlan0 , check raspberry pi'
  6. fi
  7. echo $ip | mail -s "raspberry ip:$ip" $mail1
复制代码


3.加入到开机启动 /etc/rc.d/rc.local中。

  1. /etc/rc.d/
  2. touch rc.local   
  3. echo "#!/bin/bash" > rc.local
  4. echo "sh /root/ip.sh" >> rc.local
  5. chmod  a+x rc.local
复制代码


修改/usr/lib/systemd/system/rc-local.service, 添加依赖服务(syslog/network-online):

  1. [Unit]
  2. Description=/etc/rc.d/rc.local Compatibility
  3. Documentation=man:systemd-rc-local-generator(8)
  4. ConditionFileIsExecutable=/etc/rc.d/rc.local
  5. After=syslog.target network.target network-online.target

  6. [Service]
  7. Type=forking
  8. ExecStart=/etc/rc.d/rc.local start
  9. TimeoutSec=0
  10. RemainAfterExit=yes
  11. GuessMainPID=no
复制代码


这样系统开机成功后或重启成功后时会自动发送ip邮件。

二、发送文件方式:

通过scp传送含有ip地址的文件到其他web服务器,这种办法需要有自己的服务器,还得打开相应的网址(自动刷新),用起来不是很方便。

三、事先知道树莓派的 mac 地址如  "f8:38:80:8f:d8:f7",通过ping 扫描指定网段,如 192.168.0.100 -192.168.0.120,

  1. for i in {100..120};do ping -c 2 -t 1 192.168.0.$i;done
  2. arp -a | grep "b8:27:eb:e4:e:8c" | cut -d '(' -f2 | cut -d ')' -f1
复制代码


四、客户端通过脚本访问正在开机中的树莓派

$cat pi.sh

  1. #!/bin/bash
  2. ip=''
  3. mac="b8:27:eb:e4:e:8c"

  4. while ((1))
  5. do
  6.   ip=$(arp -a | grep "$mac" | cut -d '(' -f2 | cut -d ')' -f1)
  7.   echo -n '.'
  8.   if [ "$ip" = "" ];then
  9.     for i in {100..120};do ping -c 2 -t 1 192.168.0.$i;done
  10.   else
  11.     result=$(ping -c 2 -t 1 $ip | grep 'ttl')
  12.     if [ "$result" != "" ];then
  13.       echo
  14.       echo "$ip success"
  15.       break
  16.     fi  
  17.   fi  
  18. done

  19. ssh -lroot $ip
复制代码
2#
发表于 2019-5-25 15:29:16 | 只看该作者
如果自己没有服务器,又如何让树莓派充当服务器?树莓派获取的是内网地址,也许是 n 多层内网里面的内网。

点评

树莓派当服务器,性能太弱了,只是用来做调试。 调试只需要内网地址,如果要获取外网地址,也不是什么难事。  详情 回复 发表于 2019-5-25 17:06
回复

使用道具 举报

3#
 楼主| 发表于 2019-5-25 17:06:22 | 只看该作者
不点 发表于 2019-5-25 15:29
如果自己没有服务器,又如何让树莓派充当服务器?树莓派获取的是内网地址,也许是 n 多层内网里面的内网。

树莓派当服务器,性能太弱了,只是用来做调试。
调试只需要内网地址,如果要获取外网地址,也不是什么难事。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2025-12-27 00:05

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表