基于树莓派交互抓包洞悉DHCP协议-阿里云开发者社区

开发者社区> 开发与运维> 正文
登录阅读全文

基于树莓派交互抓包洞悉DHCP协议

简介: DHCP, 树莓派,

DHCP协议介绍

环境准备

交换机(关闭了DHCP的家用路由器也可以),DHCP Server(使用了树莓派3B,下文称树莓派),DHCP Client(普通能上网的设备,包括树莓派,甚至PC均可以。笔者刚好还有一台树莓派2,用来做client,下文称Client)

设置静态IP

DHCPServer作为DHCPServer,一定要先设置好静态IP地址。比如我们用网段10.0.0.0/24,将作为DHCP Server的树莓派设置静态IP:
vi /etc/dhcpcd.conf
添加内容如下

interface eth0
static ip_address=10.0.0.4/24                                                                                                                                                                                                                
static routers=10.0.0.1                                                                                                                                                                                                                      
static domain_name_servers=10.0.0.1 8.8.8.8 114.114.114.114  

然后重启生效。

树莓派DHCP Server的安装

安装DHCP Server

在作为Server的树莓派上安装DHCP Server:
apt-get install isc-dhcp-server

配置DHCP网卡

编辑配置文件, 指定开启dhcp Server的网卡INTERFACESv4, 我们用了其中的以太网卡
vi /etc/default/isc-dhcp-server
内容如下

INTERFACESv4="eth0"
#INTERFACESv6=""

配置DHCP配置文件

vi /etc/dhcp/dhcpd.conf
主要增加如下内容

default-lease-time 600;
max-lease-time 7200;
subnet 10.0.0.0 netmask 255.255.255.0 {
        range 10.0.0.2 10.0.0.30;    #分配网段
        option domain-name-servers 10.0.0.1;   #DNS服务
        option domain-name "internal.example.org";
        option routers 10.0.0.1;  #路由地址
        option broadcast-address 10.0.0.255;  #广播地址
}

启动DHCP服务

systemctl start isc-dhcp-server 启动服务

systemctl statuc isc-dhcp-server 查看服务状态

如果遇到下面错误
Starting ISC DHCPv4 server: dhcpddhcpd service already running (pid file /var/run/dhcpd.pid currenty exists…Failed!
执行rm -rf /var/run/dhcpd.pid 删除后重启服务即可以

抓包过程

在树莓派上安装tcpdump工具

使用tcpdump命令可以在linux侧抓包,甚至可以将抓包内容拿到desktop上使用工具进行解析。树莓派默认是没有安装tcpdump工具的,下面先介绍如何在树莓派上安装tcpdump,然后介绍基于tcpdump抓包的过程。tcpdump和依赖的运行库libpcap均是开源工具,我们可以下载源码后进行编译获取。编译的方式可以在自己的PC机采用交叉编译,也可以直接在树莓派上进行编译。本文使用后面这种方式。

安装tcpdump前准备工作

安装c编译所需包

apt-get install build-essential

安装libpcap的前置包

apt-get install flex
apt-get install bison

下载libpcap和tcpdump

官网可以获得软件源码包.
到LATEST RELEASES部分下载压缩包,笔者下载的是
tcpdump-4.99.0.tar.gzlibpcap-1.10.0.tar.gz
下载后解压

安装

分别进入上述libpcap和tcpdump解压后的文件夹内进行编译和安装,基本步骤均如下

  1. 生成makefile文件
    ./configure
  2. 编译
    make
  3. 安装

make install

确认是否安装成功

root@raspberrypi:/home/pi/soft/tcpdump-4.99.0# tcpdump --version
tcpdump version 4.99.0
libpcap version 1.10.0 (with TPACKET_V3)
OpenSSL 1.1.1d  10 Sep 2019

开始抓包

执行下面命令开始监听数据包
tcpdump -i eth0 -w /root/dhcp.pcap -s 0 port 67 and port 68

此时上电client并接入到交换机,则会有DHCP租赁过程出现。我们用dhcp status也可以查看到这个交互过程。
image.png

tcpdump停下来,将上面的/root/dhcp.pcap考回到pc机,用WireShark打开,就可以观看到DHCP过程。

image.png

如果错过了这个过程怎么办?可以在Client上执行下述命令释放dhcp租约
sudo dhclient -r

同样方法抓报文可以看到如下释放的过程
image.png

然后使用
sudo dhclient 重新从client端申请

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享: