0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

超详细的网络抓包神器tcpdump使用指南

Linux爱好者 来源:Linux爱好者 2023-01-09 14:10 次阅读

tcpdump 是一款强大的网络抓包工具,它使用 libpcap 库来抓取网络数据包,这个库在几乎在所有的 Linux/Unix 中都有。熟悉 tcpdump 的使用能够帮助你分析调试网络数据,本文将通过一个个具体的示例来介绍它在不同场景下的使用方法。不管你是系统管理员,程序员,云原生工程师还是 yaml 工程师,掌握 tcpdump 的使用都能让你如虎添翼,升职加薪。

1. 基本语法和使用方法

tcpdump 的常用参数如下:

$tcpdump-ieth0-nn-s0-vport80
  • -i : 选择要捕获的接口,通常是以太网卡或无线网卡,也可以是 vlan 或其他特殊接口。如果该系统上只有一个网络接口,则无需指定。
  • -nn : 单个 n 表示不解析域名,直接显示 IP;两个 n 表示不解析域名和端口。这样不仅方便查看 IP 和端口号,而且在抓取大量数据时非常高效,因为域名解析会降低抓取速度。
  • -s0 : tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s numbernumber 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
  • -v : 使用 -v-vv-vvv 来显示更多的详细信息,通常会显示更多与特定协议相关的信息。
  • port 80 : 这是一个常见的端口过滤器,表示仅抓取 80 端口上的流量,通常是 HTTP。

额外再介绍几个常用参数:

  • -p : 不让网络接口进入混杂模式。默认情况下使用 tcpdump 抓包时,会让网络接口进入混杂模式。一般计算机网卡都工作在非混杂模式下,此时网卡只接受来自网络端口的目的地址指向自己的数据。当网卡工作在混杂模式下时,网卡将来自接口的所有数据都捕获并交给相应的驱动程序。如果设备接入的交换机开启了混杂模式,使用 -p 选项可以有效地过滤噪声。
  • -e : 显示数据链路层信息。默认情况下 tcpdump 不会显示数据链路层信息,使用 -e 选项可以显示源和目的 MAC 地址,以及 VLAN tag 信息。例如:
$tcpdump-n-e-c5notip6

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningonbr-lan,link-typeEN10MB(Ethernet),capturesize262144bytes
18:27:53.61986524:5e0c:17:af>0069:233b,ethertypeIPv4(0x0800),length1162:192.168.100.20.51410>180.176.26.193.58695:Flags[.],seq2045333376:2045334484,ack3398690514,win751,length1108
18:27:53.6264900069:233b>24:5e0c:17:af,ethertypeIPv4(0x0800),length68:220.173.179.66.36017>192.168.100.20.51410:UDP,length26
18:27:53.62689324:5e0c:17:af>0069:233b,ethertypeIPv4(0x0800),length1444:192.168.100.20.51410>220.173.179.66.36017:UDP,length1402
18:27:53.6288370069:233b>24:5e0c:17:af,ethertypeIPv4(0x0800),length1324:46.97.169.182.6881>192.168.100.20.59145:Flags[P.],seq3058450381:3058451651,ack14349180,win502,length1270
18:27:53.62909624:5e0c:17:af>0069:233b,ethertypeIPv4(0x0800),length54:192.168.100.20.59145>192.168.100.1.12345:Flags[.],ack3058451651,win6350,length0
5packetscaptured

显示 ASCII 字符串

-A 表示使用 ASCII 字符串打印报文的全部数据,这样可以使读取更加简单,方便使用 grep 等工具解析输出内容。-X 表示同时使用十六进制和 ASCII 字符串打印报文的全部数据。这两个参数不能一起使用。例如:

$tcpdump-A-s0port80

抓取特定协议的数据

后面可以跟上协议名称来过滤特定协议的流量,以 UDP 为例,可以加上参数 udp 或 protocol 17,这两个命令意思相同。

$tcpdump-ieth0udp
$tcpdump-ieth0proto17

同理,tcp 与 protocol 6 意思相同。

抓取特定主机的数据

使用过滤器 host 可以抓取特定目的地和源 IP 地址的流量。

$tcpdump-ieth0host10.10.1.1

也可以使用 srcdst 只抓取源或目的地:

$tcpdump-ieth0dst10.10.1.20

将抓取的数据写入文件

使用 tcpdump 截取数据报文的时候,默认会打印到屏幕的默认输出,你会看到按照顺序和格式,很多的数据一行行快速闪过,根本来不及看清楚所有的内容。不过,tcpdump 提供了把截取的数据保存到文件的功能,以便后面使用其他图形工具(比如 wireshark,Snort)来分析。

-w 选项用来把数据报文输出到文件:

$tcpdump-ieth0-s0-wtest.pcap

行缓冲模式

如果想实时将抓取到的数据通过管道传递给其他工具来处理,需要使用 -l 选项来开启行缓冲模式(或使用 -c 选项来开启数据包缓冲模式)。使用 -l 选项可以将输出通过立即发送给其他命令,其他命令会立即响应。

$tcpdump-ieth0-s0-lport80|grep'Server:'

组合过滤器

过滤的真正强大之处在于你可以随意组合它们,而连接它们的逻辑就是常用的 与/AND/&&或/OR/||非/not/!

andor&&
oror||
notor!

2. 过滤器

关于 tcpdump 的过滤器,这里有必要单独介绍一下。

机器上的网络报文数量异常的多,很多时候我们只关系和具体问题有关的数据报(比如访问某个网站的数据,或者 icmp 超时的报文等等),而这些数据只占到很小的一部分。把所有的数据截取下来,从里面找到想要的信息无疑是一件很费时费力的工作。而 tcpdump 提供了灵活的语法可以精确地截取关心的数据报,简化分析的工作量。这些选择数据包的语句就是过滤器(filter)!

Host 过滤器

Host 过滤器用来过滤某个主机的数据报文。例如:

$tcpdumphost1.2.3.4

该命令会抓取所有发往主机 1.2.3.4 或者从主机 1.2.3.4 发出的流量。如果想只抓取从该主机发出的流量,可以使用下面的命令:

$tcpdumpsrchost1.2.3.4

Network 过滤器

Network 过滤器用来过滤某个网段的数据,使用的是 CIDR 模式。可以使用四元组(x.x.x.x)、三元组(x.x.x)、二元组(x.x)和一元组(x)。四元组就是指定某个主机,三元组表示子网掩码为 255.255.255.0,二元组表示子网掩码为 255.255.0.0,一元组表示子网掩码为 255.0.0.0。例如,

抓取所有发往网段 192.168.1.x 或从网段 192.168.1.x 发出的流量:

$tcpdumpnet192.168.1

抓取所有发往网段 10.x.x.x 或从网段 10.x.x.x 发出的流量:

$tcpdumpnet10

和 Host 过滤器一样,这里也可以指定源和目的:

$tcpdumpsrcnet10

也可以使用 CIDR 格式:

$tcpdumpsrcnet172.16.0.0/12

Proto 过滤器

Proto 过滤器用来过滤某个协议的数据,关键字为 proto,可省略。proto 后面可以跟上协议号或协议名称,支持 icmp, igmp, igrp, pim, ah, esp, carp, vrrp, udptcp。因为通常的协议名称是保留字段,所以在于 proto 指令一起使用时,必须根据 shell 类型使用一个或两个反斜杠(/)来转义。Linux 中的 shell 需要使用两个反斜杠来转义,MacOS 只需要一个。

例如,抓取 icmp 协议的报文:

$tcpdump-nproto\icmp
#或者
$tcpdump-nicmp

Port 过滤器

Port 过滤器用来过滤通过某个端口的数据报文,关键字为 port。例如:

$tcpdumpport389

3. 理解 tcpdump 的输出

截取数据只是第一步,第二步就是理解这些数据,下面就解释一下 tcpdump 命令输出各部分的意义。

2106.995846IP(tos0x0,ttl64,id45646,offset0,flags[DF],protoTCP(6),length64)
192.168.1.106.56166>124.192.132.54.80:Flags[S],cksum0xa730(correct),seq992042666,win65535,options[mss1460,nop,wscale4,nop,nop,TSval663433143ecr0,sackOK,eol],length0

2107.030487IP(tos0x0,ttl51,id0,offset0,flags[DF],protoTCP(6),length44)
124.192.132.54.80>192.168.1.106.56166:Flags[S.],cksum0xedc0(correct),seq2147006684,ack992042667,win14600,options[mss1440],length0

2107.030527IP(tos0x0,ttl64,id59119,offset0,flags[DF],protoTCP(6),length40)
192.168.1.106.56166>124.192.132.54.80:Flags[.],cksum0x3e72(correct),ack2147006685,win65535,length0

最基本也是最重要的信息就是数据报的源地址/端口和目的地址/端口,上面的例子第一条数据报中,源地址 ip 是 192.168.1.106,源端口是 56166,目的地址是 124.192.132.54,目的端口是 80> 符号代表数据的方向。

此外,上面的三条数据还是 tcp 协议的三次握手过程,第一条就是 SYN 报文,这个可以通过 Flags [S] 看出。下面是常见的 TCP 报文的 Flags:

  • [S] : SYN(开始连接)
  • [.] : 没有 Flag
  • [P] : PSH(推送数据)
  • [F] : FIN (结束连接)
  • [R] : RST(重置连接)

而第二条数据的 [S.] 表示 SYN-ACK,就是 SYN 报文的应答报文。

4. 例子

下面给出一些具体的例子,每个例子都可以使用多种方法来获得相同的输出,你使用的方法取决于所需的输出和网络上的流量。我们在排障时,通常只想获取自己想要的内容,可以通过过滤器和 ASCII 输出并结合管道与 grep、cut、awk 等工具来实现此目的。

例如,在抓取 HTTP 请求和响应数据包时,可以通过删除标志 SYN/ACK/FIN 来过滤噪声,但还有更简单的方法,那就是通过管道传递给 grep。在达到目的的同时,我们要选择最简单最高效的方法。下面来看例子。

提取 HTTP 用户代理

从 HTTP 请求头中提取 HTTP 用户代理:

$tcpdump-nn-A-s1500-l|grep"User-Agent:"

通过 egrep 可以同时提取用户代理和主机名(或其他头文件):

$tcpdump-nn-A-s1500-l|egrep-i'User-Agent:|Host:'

只抓取 HTTP GET 和 POST 流量

抓取 HTTP GET 流量:

$tcpdump-s0-A-vv'tcp[((tcp[12:1]&0xf0)>>2):4]=0x47455420'

也可以抓取 HTTP POST 请求流量:

$tcpdump-s0-A-vv'tcp[((tcp[12:1]&0xf0)>>2):4]=0x504f5354'

注意:该方法不能保证抓取到 HTTP POST 有效数据流量,因为一个 POST 请求会被分割为多个 TCP 数据包。

上述两个表达式中的十六进制将会与 GET 和 POST 请求的 ASCII 字符串匹配。例如,tcp[((tcp[12:1] & 0xf0) >> 2):4] 首先会确定我们感兴趣的字节的位置(在 TCP header 之后),然后选择我们希望匹配的 4 个字节。

提取 HTTP 请求的 URL

提取 HTTP 请求的主机名和路径:

$ tcpdump -s 0 -v -n -l | egrep -i "POST /|GET /|Host:"

tcpdump: listening on enp7s0, link-type EN10MB (Ethernet), capture size 262144 bytes
    POST /wp-login.php HTTP/1.1
    Host: dev.example.com
    GET /wp-login.php HTTP/1.1
    Host: dev.example.com
    GET /favicon.ico HTTP/1.1
    Host: dev.example.com
    GET / HTTP/1.1
    Host: dev.example.com

提取 HTTP POST 请求中的密码

从 HTTP POST 请求中提取密码和主机名:

$tcpdump-s0-A-n-l|egrep-i"POST/|pwd=|passwd=|password=|Host:"

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningonenp7s0,link-typeEN10MB(Ethernet),capturesize262144bytes
11:25:54.799014IP10.10.1.30.39224>10.10.1.125.80:Flags[P.],seq1458768667:1458770008,ack2440130792,win704,options[nop,nop,TSval461552632ecr208900561],length1341:HTTP:POST/wp-login.phpHTTP/1.1
.....s..POST/wp-login.phpHTTP/1.1
Host:dev.example.com
.....s..log=admin&pwd=notmypassword&wp-submit=Log+In&redirect_to=http%3A%2F%2Fdev.example.com%2Fwp-admin%2F&testcookie=1

提取 Cookies

提取 Set-Cookie(服务端的 Cookie)和 Cookie(客户端的 Cookie):

$tcpdump-nn-A-s0-l|egrep-i'Set-Cookie|Host:|Cookie:'

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningonwlp58s0,link-typeEN10MB(Ethernet),capturesize262144bytes
Host:dev.example.com
Cookie:wordpress_86be02xxxxxxxxxxxxxxxxxxxc43=admin%7C152xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxfb3e15c744fdd6;_ga=GA1.2.21343434343421934;_gid=GA1.2.927343434349426;wordpress_test_cookie=WP+Cookie+check;wordpress_logged_in_86be654654645645645654645653fc43=admin%7C15275102testtesttesttestab7a61e;wp-settings-time-1=1527337439

抓取 ICMP 数据包

查看网络上的所有 ICMP 数据包:

$tcpdump-nicmp

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningonenp7s0,link-typeEN10MB(Ethernet),capturesize262144bytes
1121.590380IP10.10.1.217>10.10.1.30:ICMPechorequest,id27948,seq1,length64
1121.590434IP10.10.1.30>10.10.1.217:ICMPechoreply,id27948,seq1,length64
1127.680307IP10.10.1.159>10.10.1.1:ICMP10.10.1.189udpport59619unreachable,length115

抓取非 ECHO/REPLY 类型的 ICMP 数据包

通过排除 echo 和 reply 类型的数据包使抓取到的数据包不包括标准的 ping 包:

$tcpdump'icmp[icmptype]!=icmp-echoandicmp[icmptype]!=icmp-echoreply'

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningonenp7s0,link-typeEN10MB(Ethernet),capturesize262144bytes
11:37:04.041037IP10.10.1.189>10.10.1.20:ICMP10.10.1.189udpport36078unreachable,length156

抓取 SMTP/POP3 协议的邮件

可以提取电子邮件的正文和其他数据。例如,只提取电子邮件的收件人:

$tcpdump-nn-lport25|grep-i'MAILFROM|RCPTTO'

抓取 NTP 服务的查询和响应

$tcpdumpdstport123

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningoneth0,link-typeEN10MB(Ethernet),capturesize65535bytes
21:02:19.112502IPtest33.ntp>199.30.140.74.ntp:NTPv4,Client,length48
21:02:19.113888IP216.239.35.0.ntp>test33.ntp:NTPv4,Server,length48
21:02:20.150347IPtest33.ntp>216.239.35.0.ntp:NTPv4,Client,length48
21:02:20.150991IP216.239.35.0.ntp>test33.ntp:NTPv4,Server,length48

抓取 SNMP 服务的查询和响应

通过 SNMP 服务,渗透测试人员可以获取大量的设备和系统信息。在这些信息中,系统信息最为关键,如操作系统版本、内核版本等。使用 SNMP 协议快速扫描程序 onesixtyone,可以看到目标系统的信息:

$onesixtyone10.10.1.10public

Scanning1hosts,1communities
10.10.1.10[public]Linuxtest334.15.0-20-generic#21-UbuntuSMPTueApr240615UTC2018x86_64

可以通过 tcpdump 抓取 GetRequestGetResponse

$ tcpdump -n -s0  port 161 and udp
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
2313.725522 IP 10.10.1.159.36826 > 10.10.1.20.161:  GetRequest(28)  .1.3.6.1.2.1.1.1.0
2313.728789 IP 10.10.1.20.161 > 10.10.1.159.36826:  GetResponse(109)  .1.3.6.1.2.1.1.1.0="Linux testmachine 4.15.0-20-generic #21-Ubuntu SMP Tue Apr 24 0615 UTC 2018 x86_64"

切割 pcap 文件

当抓取大量数据并写入文件时,可以自动切割为多个大小相同的文件。例如,下面的命令表示每 3600 秒创建一个新文件 capture-(hour).pcap,每个文件大小不超过 200*1000000 字节:

$tcpdump-w/tmp/capture-%H.pcap-G3600-C200

这些文件的命名为 capture-{1-24}.pcap,24 小时之后,之前的文件就会被覆盖。

抓取 IPv6 流量

可以通过过滤器 ip6 来抓取 IPv6 流量,同时可以指定协议如 TCP:

$tcpdump-nnip6proto6

从之前保存的文件中读取 IPv6 UDP 数据报文:

$tcpdump-nripv6-test.pcapip6proto17

检测端口扫描

在下面的例子中,你会发现抓取到的报文的源和目的一直不变,且带有标志位 [S][R],它们与一系列看似随机的目标端口进行匹配。当发送 SYN 之后,如果目标主机的端口没有打开,就会返回一个 RESET。这是 Nmap 等端口扫描工具的标准做法。

$ tcpdump -nn

2119.693601 IP 10.10.1.10.60460 > 10.10.1.199.5432: Flags [S], seq 116466344, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
2119.693626 IP 10.10.1.10.35470 > 10.10.1.199.513: Flags [S], seq 3400074709, win 29200, options [mss 1460,sackOK,TS val 3547090332 ecr 0,nop,wscale 7], length 0
2119.693762 IP 10.10.1.10.44244 > 10.10.1.199.389: Flags [S], seq 2214070267, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
2119.693772 IP 10.10.1.199.389 > 10.10.1.10.44244: Flags [R.], seq 0, ack 2214070268, win 0, length 0
2119.693783 IP 10.10.1.10.35172 > 10.10.1.199.1433: Flags [S], seq 2358257571, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
2119.693826 IP 10.10.1.10.33022 > 10.10.1.199.49153: Flags [S], seq 2406028551, win 29200, options [mss 1460,sackOK,TS val 3547090333 ecr 0,nop,wscale 7], length 0
2119.695567 IP 10.10.1.10.55130 > 10.10.1.199.49154: Flags [S], seq 3230403372, win 29200, options [mss 1460,sackOK,TS val 3547090334 ecr 0,nop,wscale 7], length 0
2119.695590 IP 10.10.1.199.49154 > 10.10.1.10.55130: Flags [R.], seq 0, ack 3230403373, win 0, length 0
2119.695608 IP 10.10.1.10.33460 > 10.10.1.199.49152: Flags [S], seq 3289070068, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
2119.695622 IP 10.10.1.199.49152 > 10.10.1.10.33460: Flags [R.], seq 0, ack 3289070069, win 0, length 0
2119.695637 IP 10.10.1.10.34940 > 10.10.1.199.1029: Flags [S], seq 140319147, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
2119.695650 IP 10.10.1.199.1029 > 10.10.1.10.34940: Flags [R.], seq 0, ack 140319148, win 0, length 0
2119.695664 IP 10.10.1.10.45648 > 10.10.1.199.5060: Flags [S], seq 2203629201, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
2119.695775 IP 10.10.1.10.49028 > 10.10.1.199.2000: Flags [S], seq 635990431, win 29200, options [mss 1460,sackOK,TS val 3547090335 ecr 0,nop,wscale 7], length 0
2119.695790 IP 10.10.1.199.2000 > 10.10.1.10.49028: Flags [R.], seq 0, ack 635990432, win 0, length 0

过滤 Nmap NSE 脚本测试结果

本例中 Nmap NSE 测试脚本 http-enum.nse 用来检测 HTTP 服务的合法 URL。

在执行脚本测试的主机上:

$nmap-p80--script=http-enum.nsetargetip

在目标主机上:

$tcpdump-nnport80|grep"GET/"

GET/w3perl/HTTP/1.1
GET/w-agora/HTTP/1.1
GET/way-board/HTTP/1.1
GET/web800fo/HTTP/1.1
GET/webaccess/HTTP/1.1
GET/webadmin/HTTP/1.1
GET/webAdmin/HTTP/1.1

抓取 DNS 请求和响应

向 Google 公共 DNS 发起的出站 DNS 请求和 A 记录响应可以通过 tcpdump 抓取到:

$ tcpdump -i wlp58s0 -s0 port 53

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on wlp58s0, link-type EN10MB (Ethernet), capture size 262144 bytes
1406.879799 IP test.53852 > google-public-dns-a.google.com.domain: 26977+ [1au] A? play.google.com. (44)
1407.022618 IP google-public-dns-a.google.com.domain > test.53852: 26977 1/0/1 A 216.58.203.110 (60)

抓取 HTTP 有效数据包

抓取 80 端口的 HTTP 有效数据包,排除 TCP 连接建立过程的数据包(SYN / FIN / ACK):

$tcpdump'tcpport80and(((ip[2:2]-((ip[0]&0xf)<<2)) -((tcp[12]&0xf0)>>2))!=0)'

将输出内容重定向到 Wireshark

通常 Wireshark(或 tshark)比 tcpdump 更容易分析应用层协议。一般的做法是在远程服务器上先使用 tcpdump 抓取数据并写入文件,然后再将文件拷贝到本地工作站上用 Wireshark 分析。

还有一种更高效的方法,可以通过 ssh 连接将抓取到的数据实时发送给 Wireshark 进行分析。以 MacOS 系统为例,可以通过 brew cask install wireshark 来安装,然后通过下面的命令来分析:

$sshroot@remotesystem'tcpdump-s0-c1000-nn-w-notport22'|/Applications/Wireshark.app/Contents/MacOS/Wireshark-k-i-

例如,如果想分析 DNS 协议,可以使用下面的命令:

$sshroot@remotesystem'tcpdump-s0-c1000-nn-w-port53'|/Applications/Wireshark.app/Contents/MacOS/Wireshark-k-i-

抓取到的数据:

50964dc8-8fd4-11ed-bfe3-dac502259ad0.pngimg

-c 选项用来限制抓取数据的大小。如果不限制大小,就只能通过 ctrl-c 来停止抓取,这样一来不仅关闭了 tcpdump,也关闭了 wireshark。

找出发包最多的 IP

找出一段时间内发包最多的 IP,或者从一堆报文中找出发包最多的 IP,可以使用下面的命令:

$tcpdump-nnn-t-c200|cut-f1,2,3,4-d'.'|sort|uniq-c|sort-nr|head-n20

tcpdump:verboseoutputsuppressed,use-vor-vvforfullprotocoldecode
listeningonenp7s0,link-typeEN10MB(Ethernet),capturesize262144bytes
200packetscaptured
261packetsreceivedbyfilter
0packetsdroppedbykernel
108IP10.10.211.181
91IP10.10.1.30
1IP10.10.1.50
  • cut -f 1,2,3,4 -d '.' : 以 . 为分隔符,打印出每行的前四列。即 IP 地址。
  • sort | uniq -c : 排序并计数
  • sort -nr : 按照数值大小逆向排序

抓取用户名和密码

本例将重点放在标准纯文本协议上,过滤出于用户名和密码相关的报文:

$tcpdumpporthttporportftporportsmtporportimaporportpop3orporttelnet-l-A|egrep-i-B5'pass=|pwd=|log=|login=|user=|username=|pw=|passw=|passwd=|password=|pass:|user:|username:|password:|login:|pass|user'

抓取 DHCP 报文

最后一个例子,抓取 DHCP 服务的请求和响应报文,67 为 DHCP 端口,68 为客户机端口。

$tcpdump-v-nport67or68

tcpdump:listeningonenp7s0,link-typeEN10MB(Ethernet),capturesize262144bytes
1450.059662IP(tos0x10,ttl128,id0,offset0,flags[none],protoUDP(17),length328)
0.0.0.0.68>255.255.255.255.67:BOOTP/DHCP,Requestfrom00xxxx:d5,length300,xid0xc9779c2a,Flags[none]
Client-Ethernet-Address00xxxx:d5
Vendor-rfc1048Extensions
MagicCookie0x63825363
DHCP-MessageOption53,length1:Request
Requested-IPOption50,length4:10.10.1.163
HostnameOption12,length14:"test-ubuntu"
Parameter-RequestOption55,length16:
Subnet-Mask,BR,Time-Zone,Default-Gateway
Domain-Name,Domain-Name-Server,Option119,Hostname
Netbios-Name-Server,Netbios-Scope,MTU,Classless-Static-Route
NTP,Classless-Static-Route-Microsoft,Static-Route,Option252
1450.059667IP(tos0x10,ttl128,id0,offset0,flags[none],protoUDP(17),length328)
0.0.0.0.68>255.255.255.255.67:BOOTP/DHCP,Requestfrom00xxxx:d5,length300,xid0xc9779c2a,Flags[none]
Client-Ethernet-Address00xxxx:d5
Vendor-rfc1048Extensions
MagicCookie0x63825363
DHCP-MessageOption53,length1:Request
Requested-IPOption50,length4:10.10.1.163
HostnameOption12,length14:"test-ubuntu"
Parameter-RequestOption55,length16:
Subnet-Mask,BR,Time-Zone,Default-Gateway
Domain-Name,Domain-Name-Server,Option119,Hostname
Netbios-Name-Server,Netbios-Scope,MTU,Classless-Static-Route
NTP,Classless-Static-Route-Microsoft,Static-Route,Option252
1450.060780IP(tos0x0,ttl64,id53564,offset0,flags[none],protoUDP(17),length339)
10.10.1.1.67>10.10.1.163.68:BOOTP/DHCP,Reply,length311,xid0xc9779c2a,Flags[none]
Your-IP10.10.1.163
Server-IP10.10.1.1
Client-Ethernet-Address00xxxx:d5
Vendor-rfc1048Extensions
MagicCookie0x63825363
DHCP-MessageOption53,length1:ACK
Server-IDOption54,length4:10.10.1.1
Lease-TimeOption51,length4:86400
RNOption58,length4:43200
RBOption59,length4:75600
Subnet-MaskOption1,length4:255.255.255.0
BROption28,length4:10.10.1.255
Domain-Name-ServerOption6,length4:10.10.1.1
HostnameOption12,length14:"test-ubuntu"
T252Option252,length1:10
Default-GatewayOption3,length4:10.10.1.1

5. 总结

本文主要介绍了 tcpdump 的基本语法和使用方法,并通过一些示例来展示它强大的过滤功能。将 tcpdump 与 wireshark 进行组合可以发挥更强大的功效,本文也展示了如何优雅顺滑地结合 tcpdump 和 wireshark。如果你想了解更多的细节,可以查看 tcpdump 的 man 手册。

审核编辑 :李倩


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 数据包
    +关注

    关注

    0

    文章

    229

    浏览量

    24093
  • 网络数据
    +关注

    关注

    1

    文章

    43

    浏览量

    10000

原文标题:超详细的网络抓包神器 tcpdump 使用指南

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    tcpdump命令介绍

    1.命令简介tcpdump 是一款类 Unix/Linux 环境下的包工具,允许用户截获和显示发送或收到的网络数据tcpdump 是一
    发表于 04-08 06:02

    热敏FET使用指南

    电子发烧友网站提供《热敏FET使用指南.pdf》资料免费下载
    发表于 02-22 09:35 0次下载
    热敏FET<b class='flag-5'>使用指南</b>

    4G路由器的使用指南及技巧

    4G路由器的使用指南及技巧
    的头像 发表于 11-06 11:27 399次阅读

    AT32F425入门使用指南

    AT32F425入门使用指南旨在让用户快速使用AT32F425xx 进行项目开发。
    发表于 10-26 07:46

    AT32F402/405 DMA使用指南

    AT32F402/405 DMA使用指南主要就DMA 的基本功能进行讲解和案列解析。
    发表于 10-26 07:29

    AT32 VSCode PlatFormIO使用指南

    AT32 VSCode PlatFormIO使用指南旨在帮助使用VSCode+PlatFormIO开发AT32的用户,快速建立开发环境并进行开发。
    发表于 10-26 07:14

    AT32F423入门使用指南

    AT32F423入门使用指南旨在让用户快速使用AT32F423xx 进行项目开发。
    发表于 10-26 06:37

    AT32F425 ADC使用指南

    AT32F425 ADC使用指南本文主要以ADC 的特色功能进行讲解和案列解析。
    发表于 10-25 08:29

    AT32F425 DMA使用指南

    AT32F425 DMA使用指南本文主要就DMA 的基本功能进行讲解和案列解析。
    发表于 10-25 07:52

    AT32F435/437 EDMA使用指南

    AT32F435/437 EDMA使用指南本文主要就EDMA 的基本功能进行讲解和案列解析。
    发表于 10-25 07:24

    AT32F421入门使用指南

    AT32F421入门使用指南旨在让用户快速使用AT32F421xx 进行项目开发。
    发表于 10-24 07:38

    Linux网络分析tcpdump的基本用法

    我们先通过几个简单的示例来介绍 tcpdump 基本用法。 1. 不加任何参数,默认情况下将抓取第一个非 lo 网卡上所有的数据包 $ tcpdump  2.  抓取 eth0 网卡上的所有
    的头像 发表于 09-28 15:42 305次阅读

    Linux网络分析tcpdump工作原理和应用

    在日常工作中遇到的很多网络问题都可以通过 tcpdump 优雅的解决: 相信大多数同学都遇到过 SSH 连接服务器缓慢,通过 tcpdump 抓包,可以快速定位到具体原因,一般都是因为 DNS 解析
    的头像 发表于 09-28 15:30 303次阅读
    Linux<b class='flag-5'>网络</b>分析<b class='flag-5'>tcpdump</b>工作原理和应用

    EdgeBoard使用指南

    电子发烧友网站提供《EdgeBoard使用指南.pdf》资料免费下载
    发表于 09-15 10:56 0次下载
    EdgeBoard<b class='flag-5'>使用指南</b>

    使用tcpdump后生成的pcap文件大小为0

    请大佬们帮忙看看怎么回事吧 我在SSH中使用“sudo tcpdump -i eth0 dst 192.168.0.55”命令进行,control+c停止后,使用“sudo tcpdump
    发表于 05-18 22:29