前面几篇博客中,wifi网卡的ip都是手工设置的,本篇博客将来移植dhcp,使得wifi网卡可以动态的获取ip、路由等信息。

那我们去哪里下载dhcp源码呢?
在pc机上执行dh +tab键,看一下有哪些应用程序?
其中有一个应用程序为dhclient,执行dhclient -v,可以看到:
For info,please visit http://www.isc.org/downloads/dhcp
从这可以看出,它就是从网站http://www.isc.org/sw/dhcp获取源码的。

a. dhcp : 使得WIFI网卡动态获取IP
a.1 编译、安装
tar xzf dhcp-4.2.5-P1.tar.gz
cd dhcp-4.2.5-P1
./configure --host=arm-linux ac_cv_file__dev_random=yes

cd bind
修改Makefile:
./configure BUILD_CC=gcc ac_cv_file__dev_random=yes --host=arm-linux --disable-kqueue

tar xzf bind.tar.gz
cd bind-9.8.4-P2
修改 lib/export/dns/Makefile.in
gen: ${srcdir}/gen.c
${CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}
改为
gen: ${srcdir}/gen.c
${BUILD_CC} ${ALL_CFLAGS} ${LDFLAGS} -o $@ ${srcdir}/gen.c ${LIBS}

cd ../..
make DESTDIR=$PWD/tmp install

把文件复制到NFS
sudo cp bin/* /work/nfs_root/fs_mini_mdev_new/bin/
sudo cp sbin/* /work/nfs_root/fs_mini_mdev_new/sbin/
sudo cp etc/dhclient.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhclient.conf
sudo cp etc/dhcpd.conf.example //work/nfs_root/fs_mini_mdev_new/etc/dhcpd.conf

sudo cp client/scripts/linux /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
chmod +x /work/nfs_root/fs_mini_mdev_new/etc/dhclient-script
并修改
#!/bin/bash
改为
#!/bin/sh

a.2 使用:
mkdir -p /var/db   //解决出现的警告信息
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
dhclient -d wlan0

此时ifconfig看一下,就可以看到wlan0有ip了。

route看一下,也配置了路由了。

cat /etc/resolv.conf,可以看到将域名服务器也设置好了。

直接ping news.qq.com,就会成功。

a.3 这样使用起来还有一些麻烦,能不能一接入WIFI网卡,就自动执行wpa_supplicant等
参考第2期视频第28课热拔插
cat /etc/mdev.conf
wlan0 0:0 777 * /sbin/auto_wifi.sh

cat /sbin/auto_wifi.sh
#!/bin/sh
if [ $ACTION = "add" ];
then
  wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0    //如果添加网卡(包括两种情况:连接与断开)的话,就需要执行这两条命令
  wpa_cli -a/sbin/wpa_action.sh -B
else
  killall wpa_supplicant   //拔掉网卡时,执行这些命令。
  killall wpa_cli
  killall dhclient
fi

chmod +x /sbin/auto_wifi.sh

a.4 一连接上WIFI AP, 就自动执行dhclient
创建一脚本:
cat /sbin/wpa_action.sh
#!/bin/sh
IFNAME=$1   //网卡
CMD=$2    //命令   有connected和disconnected两种。
if [ "$CMD" = "CONNECTED" ]; then
  echo connect $IFNAME, dhclient for it > /dev/console
  dhclient $IFNAME
fi
if [ "$CMD" = "DISCONNECTED" ]; then
  echo disconnect $IFNAME, kill dhclient for it > /dev/console
  killall dhclient
fi

总结一下接上网卡和拔掉网卡的过程:

首先接上网卡时会触发mdev,mdev就会根据配置文件mdev.conf执行/sbin/auto_wifi.sh脚本。当它发现是添加网卡时,就会执行下面这两条命令:
wpa_supplicant -B -c/etc/wpa_wpa2.conf -iwlan0
wpa_cli -a/sbin/wpa_action.sh -B:

当wpa_supplicant发现wifi网卡连接上AP之后,它就会给wpa_cli发一个事件,wpa_cli就会执行wpa_action.sh的脚本。
当wpa_supplicant发现网卡与AP断开之后,它也会给wpa_cli发送一个事件,wpa_cli就会去执行wpa_action.sh的脚本。

对于wpa_action.sh脚本:

一旦接上wifi 网卡时,执行CONNECTED那个分支,默认的就是这个分支。我感觉这个地方脚本还有点问题。问题在于在wpa_action.sh这个脚本中,你是如何确定它走的是CONNECTED分支还是DISCONNECTED分支。在auto_wifi.sh脚本中,你只是指明了它要执行wpa_action.sh这个脚本,但是具体执行哪个分支,并没有交代清楚。

如果将网卡拔掉时,同样会触发mdev,执行medv.conf,此时它不走add那条分支了,而是直接执行:
killall wpa_supplicant
killall wpa_cli
killall dhclient

使用WIFI网卡 dhcp动态获取IP的更多相关文章

  1. VMware虚拟机在仅主机模式下的网卡无法动态获取IP

    自己在VMware虚拟机中开启一台主机的时候,发现比以往的开机速度慢了好多,起初不以为然,直到用Xshell通过ssh远程连接eth1的ip地址才发现连接失败(这个ip是之前eth1正常的时候获取的i ...

  2. Centos7 网卡DHCP重新获取IP地址

    问题:局域网内一台linux系统(Centos7.4)DHCP自动获取的IP地址和另一台手动配置的静态IP冲突了 解决方法:让DHCP自动获取的IP地址重新获取一个别的IP地址 DHCP重新获取IP ...

  3. Centos 7开启网卡打开DHCP自动获取IP

    在Windows10上安装了CentOS7的Hyper-V虚拟机. 虽然配置了可访问外网的网卡(Win8.1 Hyper-V 共享本机IP上网),但是默认安装的CentOS是没有开启配置网卡信息的,也 ...

  4. 解决网卡无法自动获取ip的办法

    解决网卡无法自动获取IP址的方法          为了省钱或者一户多机,很多人都购买宽带路由器共享上网.在架设路由上网的时候,有些“师傅”可能不懂或是偷懒,开启了宽带路由器的DHCP( Dynami ...

  5. Kali桥接模式DHCP自动获取IP失败(VMware)

    Kali桥接模式DHCP自动获取IP失败笔者用的是VMware运行Kali Linux,突然发现桥接模式无法上网,只能使用NAT模式.身为有一点点强迫症的人来说,这就很不爽了.于是马上切换为桥接模式, ...

  6. NetScaler通过DHCP服务器获取IP地址

    NetScaler通过DHCP服务器获取IP地址 DHCP 选项参考 https://www.iana.org/assignments/bootp-dhcp-parameters/bootp-dhcp ...

  7. 1. 通过DHCP服务器动态获取IP地址之后无法上网的解决方法

    故障:内网正常,在同一个局域网内的其它PC端通过DHCP获取IP地址并且可以正常上网. 1.通过wireshark抓包,使用ipconfig /renew时,wireshark内出现DHCP请求服务, ...

  8. [解决]Kali Linux DHCP自动获取IP失败 坑爹的VMWare桥接

    root@kali:~# service networking restart [....] Running /etc/init.d/networking restart is deprecated ...

  9. 通过DHCP动态管理IP地址

    DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,使用UDP协议工作, 主要有两个用途:给内部网络或网络服务供应商自动分配IP ...

随机推荐

  1. 7.18 NOIP模拟测试5 星际旅行+砍树+超级树

    T1 星际旅行 题意:n个点,m条边,无重边,有自环,要求经过m-2条边两次,2条边一次,问共有多少种本质不同的方案.本质不同:当且仅当至少存在一条边经过次数不同. 题解:考试的时候理解错题,以为他是 ...

  2. Linux性能优化实战学习笔记:第十八讲

    一.内存的分配和回收 1.管理内存的过程中,也很容易发生各种各样的“事故”, 对应用程序来说,动态内存的分配和回收,是既核心又复杂的一的一个逻辑功能模块.管理内存的过程中,也很容易发生各种各样的“事故 ...

  3. 3,[VS] 编程时的有必要掌握的小技巧_______________________________请从下面第 1 篇看起

    本文导览: 善用“并排显示窗口”功能 做作业/测试时使用 多项目 多个源文件 多个子函数 使用Visual Studio team代码同步工具,及时把项目文件保存到云端 关闭括号分号自动联想 技巧是提 ...

  4. python总结十

    1.代码int('20',8)的返回结果是:16 2.日志的统计和记录对于程序开发来说非常重要,python提供了非常好用的日志模块logging 3.元祖修改 4.python内置映射类型称为字典 ...

  5. div 中 id 和 class使用详解【转】

    原文地址:https://blog.csdn.net/zxw136511485/article/details/71191053 在div 标签中,我们比较常见的属性是id 和class,那么这两个属 ...

  6. Visual Studio 调试系列5 检查变量(使用自动窗口和局部变量窗口)

    系列目录     [已更新最新开发文章,点击查看详细] 在调试时,“自动变量”和“局部变量”窗口会显示变量值. 仅在调试会话期间,这两个窗口才可用. “自动变量”窗口显示当前断点周围使用的变量. “局 ...

  7. 数据库多行数据合并一行(sqlserver、Oracle、Mysql)

    我们日常查询数据时,经常会有将查询到的数据按照某一列分组显示(合并多行数据),比如: 表结构: ),coursename )); 需要将以上数据按照用户名分组,所选课程列不同项之间用逗号隔开,在一行中 ...

  8. .NET Core:SignalR

    在Startup中的ConfigureServices方法中配置:services.AddSignalR(); 跨域设置中需要更改设置:services.AddCors(options => o ...

  9. ROS融合IMU笔记

    ROS官网有一个叫robot_pose_ekf的包,是专门处理传感器融合的包,具体介绍:http://wiki.ros.org/robot_pose_ekf 其中主要功能是订阅主题包括odom(里程计 ...

  10. vue学习面向对象,在项目中怎么用呢?

    面向对象感觉很牛逼,可是在项目中怎么用呢? 我至今见到的用法,写了一个用户对象. 效果:只要执行了new User(userInfo)就会在cookie,localStorage存放数据. 所以最简单 ...