前面几篇博客中,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. c语言线程中传输多个参数

    前言:c语言中创建一条线程,但是需要传送多个参数给线程的话我们自然会想到通过传送数组或者结构体来实现,下面我们来看看如何在创建线程的时候传送结构体和数组. #include <stdio.h&g ...

  2. 解决WIN10左侧盘符顺序问题

    Windows Registry Editor Version 5.00 [-HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ ...

  3. [LeetCode] 8. String to Integer (atoi) 字符串转为整数

    Implement atoi which converts a string to an integer. The function first discards as many whitespace ...

  4. WPF 目录树绑定 与 遍历

    定义树节点,(编译环境VS2017) public class GBTreeNode : INotifyPropertyChanged { private string _deviceId = str ...

  5. 第一次实验报告:使用Packet Tracer分析HTTP数据包

    目录 1 实验目的 2 实验内容 3. 实验报告 第一次实验报告:使用Packet Tracer分析HTTP数据包 1 实验目的 熟练使用Packet Tracer工具.分析抓到的HTTP数据包,深入 ...

  6. pgsql_pg的数据类型

    PostgreSQL 提供了丰富的数据类型.用户可以使用 CREATE TYPE 命令在数据库中创建新的数据类型.PostgreSQL 的数据类型被分为四种,分别是基本数据类型.复合数据类型.域和伪类 ...

  7. Shell脚本——显示系统上的登录用户数

    写一个脚本showlogged.sh,其用法格式为: showlogged.sh -v -c -h|--help 其中,-h选项只能单独使用,用于显示帮助信息:-c选项时,显示当前系统上登录的所有用户 ...

  8. Spring Boot 自定义 Shiro 过滤器,无法使用 @Autowired 解决方法

    在 Spring Boot 中集成 Shiro,并使用 JWT 进行接口认证. 为了统一对 Token 进行过滤,所以自定义了一个 JwtTokenFilter 过滤器. 期间遇到了以下几个问题,这里 ...

  9. html 四种定位含义

    技术过段时间不用的话就会忘记,需要复习一下 1.static:默认值.没有定位,元素出现在正常的流中(忽略top,bottom,left,right或者z-index声明). 2.relative:生 ...

  10. HTML--元素居中各种处理方法

    1.水平居中 对于行内元素可以使用: .center-children { text-align: center; } 对于块元素,你可以设置其左右外边距为:auto;同时你还应该设置该元素的宽度,不 ...