讲清楚,说明白!tcpdump命令行网络抓包工具

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了讲清楚,说明白!tcpdump命令行网络抓包工具相关的知识,希望对你有一定的参考价值。

目录:
(一)tcpdump命令
(二)tcpdump筛选


(一)tcpdump命令
(1.1)tcpdump是一个用于截取网络分组,并输出分组内容的工具。凭借强大的功能和灵活的截取策略,使其成为类Unix系统下用于网络分析和问题排查的首选工具。tcpdump支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等语句来帮助你去掉无用的信息。
(1.2)tcpdump指令默认只抓取每个数据包的前68个字节,通常情况下会将TCP/IP以及二层包头信息会完整抓取的,如果需要做完整的数据包的内容分析是不够的,一般68个字节中只是包含了源地址、目的地址、端口等信息。
(1.3)首先我们可以使用“-i”参数指定网卡名,使用“-s”指定抓的数据包的大小,使用“-w”参数表示将数据包保存到指定的文件中。我们指定vms001主机的网卡是eno16777728,然后指定数据包的大小为0表示抓全部的数据包,使用-w表示将抓取的数据包的信息存放到a.cap文件中。
# tcpdump -i eno16777728 -s 0 -w a.cap---指定vms001主机的网卡是eno16777728,然后指定数据包的大小为0表示抓全部的数据包,使用-w表示将抓取的数据包的信息存放到a.cap文件中
技术图片
技术图片
(1.4)如果我们希望查看所抓的包的内容,可以使用“-r”参数对数据包进行查看。
# tcpdump -r a.cap---表示读取数据包中内容
技术图片
(1.5)如果我们希望通过ASCII码的形式将数据包显示出来,我们可以通过使用“-A”的参数将数据包显示出来。
# tcpdump -A -r a.cap---以ASCII码的形式进行显示
技术图片
(1.6)如果我们希望通过十六进制的形式去显示数据包中的内容,则我们可以通过“-X”的参数来进行查看。
# tcpdump -X -r a.cap---以十六进制的形式显示数据包中的内容
技术图片


(二)tcpdump筛选
(2.1)tcpdump也可以使用抓包筛选器进行信息的筛选,如果我们希望抓某种类型或者某种端口的包,则可以指定网卡或者端口号。
# nc -nv 192.168.26.102 22---从vms001主机上尝试连接vms002主机的22端口
# tcpdump -i eno16777728 tcp port 80---在vms001主机上抓eno16777728网卡上80端口的数据包
技术图片
技术图片
(2.2)tcpdump指令也是可以实现显示筛选器的功能,我们首先创建一个http.cap的文件,然后使用“tcpdump -n -r”将所有的信息显示出来,其中“-n”表示不解析主机名,“-r”表示读取文件,并使用awk显示文件的第3列信息,最后使用sort命令去重,此时我们便得到了所有的IP地址和端口号信息。
# tcpdump -i eno16777728 -w http.cap---收集网卡eno16777728的信息并写入到http.cap文件中
# tcpdump -n -r http.cap---显示http.cap文件中所有记录的信息,“-n”表示不解析主机名
# tcpdump -n -r http.cap | awk ‘{print $3}‘| sort -u---使用“tcpdump -n -r”将所有的信息显示出来,并使用awk显示文件的第3列信息,最后使用sort命令去重,注意sort -u命令和sort | uniq -c意义相同一致
技术图片
技术图片
(2.3)如果我们想查询来源IP的主机名为192.168.26.101的所有的信息行,我们可以使用tcpdump -n src host来指定来源IP地址的信息,此时我们便得到了源IP是192.168.26.101的所有信息行(图1-10)。如果我们需要查询目标IP地址为192.168.26.102的所有信息行,则我们可以使用tcpdump -n dst host来指定目标IP地址的信息(图1-11)。
# tcpdump -n src host 192.168.26.101 -r http.cap---在vms002主机查询源地址为192.168.26.101主机的所有符合要求的行
# tcpdump -n dst host 192.168.26.102 -r http.cap---在vms002主机查询目标地址为192.168.26.102主机的所有符合要求的行
技术图片
技术图片
(2.4)我们也可以通过端口号来进行筛选,我们可以使用tcpdump -n tcp port来指定端口号,以此来查询对应的信息行。
# tcpdump -n tcp port 22 -r http.cap---指定抓取端口号为22的信息行
技术图片
(2.5)如果希望以十六进制的形式将数据包的筛选信息显示出来,则可以使用-X参数。
# tcpdump -n -X port 22 -r http.cap---以十六进制的形式将数据包的筛选信息显示出来,“-n”表示不解析主机名
技术图片
(2.6)tcpdump指令还可以执行很多高级筛选的功能,其中每一行8位表示一个字节,每一行表示有4个字节共有32位,其中第5部分开头Date Offset表示的是数据的偏移量,其中cwr、ece、urg、ack、psh、rst、ayn、fin表示的是TCP的标签位。例如我们希望将ack和psh标签位为1的数据全部筛选出来,此时我们将两个位的值加起来可以得到10进制的结果为24。其中“source port”和“Destination Port”一行表示的是标号0-3共4个字节,以res.cwr开头的字节表示的是标号0-13的第14个字节,所以我们在tcp数组中使用tcp[13]表示的是标签位的信息,我们只需要指定“tcp[13]=24”,就可以筛选出ack和psh标签位为1的所有数据行信息。此时我们便可以实现tcp包中任何位置、任何数值的筛选,颗粒度非常的细化了。
# tcpdump -A -n ‘tcp[13]=24‘ -r http.cap---筛选出来tcp包的0-13,即第14个字节的和为24的所有信息行,以ASCII码的形式显示
技术图片
技术图片

—————— 本文至此结束,感谢阅读 ——————

以上是关于讲清楚,说明白!tcpdump命令行网络抓包工具的主要内容,如果未能解决你的问题,请参考以下文章

网络/命令行抓包工具tcpdump详解

tcpdump抓包工具的基本使用

干货分享 | 在 Linux 命令行中使用 tcpdump 抓包

UNIX系统上的抓包工具tcpdump常用命令说明

搞明白 WebSocket 与 TCP/IP

linux使用tcpdump抓包工具抓取网络数据包,多示例演示