OS CentOS 4.7 Tcpdump rpm tcpdump-3.8.2-12.el4_6.1 tcpdump version 3.8 libpcap version 0.8.3 Tcpreplay rpm tcpreplay-3.3.2-1.el4.rf tcpreplay version: 3.3.2 (build 2065) Copyright 2001-2008 by Aaron TurnerCache file supported: 04 Not compiled with libnet. Compiled against libpcap: 0.8.3 64 bit packet counters: enabled Verbose printing via tcpdump: disabled Packet editing: enabled Fragroute engine: enabled
# 这里是两个工具的抓包命令详解,当然,这里我们只简单介绍一下我们用到的几个参数 shell> tcpdump -s0 -vv -e -i eth0 -nn port 67 -c 100 -w yfang.cap # -e: 打印连接层信息 # -vv: 打印详细信息 # -i eth0: 监听eth0网卡 # -nn:保留输出中的端口和协议使用数字格式 # -c 100:抓取满足条件的100个包,结束。否则会一直抓下去 # -s0: 这个参数对我们这次实验起着非常重要的作用,-s0表明不对包的尺寸进行裁剪,保持原来大小 # port 67: 不用多解释,因为DHCP协议主要是客户端与服务器端的67和68两个端口的信息交互 # -w yfang.cap: tcpdump默认把截获的包以文字形式输出到标准输出,-w参数强制按照cap格式输出到文件yfang.cap,用于后面我们replay shell> wireshark # 这个不用解释了,简单说一下,对于wireshark-gnome-1.0.3,filter格式会类似于“udp.port == 67”,而不支持以前的版本ethereal中 “port 67”这样的格式 # 另外一个问题,使用wireshark抓到很多包,如果想要保存其中选中的包,正解是:File->Save As->Selected packet only->写好文件名,保存就好了
#首先截获一个DHCP包,注意,没有加-s0参数
root@S71[1]~15:28:04# tcpdump -e -i eth0 -nn port 67 -c 1 -w yfang.cap
#接下来replay这个包,不做任何修改,这里只用了两个参数 -i eth0不解释了,-l 3表示连续发这个包3次,其实测试的话,发一次也OK
root@S71[1]~15:28:14# tcpreplay -i eth0 -l 3 yfang.cap
sending out eth0
processing file: yfang.cap
processing file: yfang.cap
processing file: yfang.cap
Actual: 3 packets (288 bytes) sent in 0.23 seconds
Rated: 12007.5 bps, 0.09 Mbps/sec, 125.08 pps
Statistics for network device: eth0
Attempted packets: 3
Successful packets: 3
Failed packets: 0
Retried packets (ENOBUFS): 0
Retried packets (EAGAIN): 0
# 花开两支,在刚才那个命令执行之前,先在另一台服务器S172上(其实同一台也OK,为的是表明局域网其他机器可以看到包)监听包
[root@S172 ~]# tcpdump -i eth0 port 67 -c 10
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes
15:28:16.023336 IP truncated-ip - 279 bytes missing! 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:1b:77:59:ed:d2, length: 333
15:29:14.583293 IP truncated-ip - 279 bytes missing! 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:1b:77:59:ed:d2, length: 333
15:29:14.591208 IP truncated-ip - 279 bytes missing! 0.0.0.0.bootpc > 255.255.255.255.bootps: BOOTP/DHCP, Request from 00:1b:77:59:ed:d2, length: 333
# 我们注意到后面三行,三个奇怪的包,被truncate过了,这一点使用wireshark打开cap文件查看包的信息会看到下面这样的警告
# [Packet size limited during capture: BOOTP/DHCP truncated]
# 经过检查发现是-s参数的作用,加上-s0参数就好了| DHCP Massage Type | Value |
|---|---|
| DHCP DISCOVER | 01 |
| DHCP OFFER | 02 |
| DHCP REQUST | 03 |
| DHCP ACK | 05 |
| DHCP INFORM | 08 |