实践tcpdump命令,成为网络数据抓包高手

这篇具有很好参考价值的文章主要介绍了实践tcpdump命令,成为网络数据抓包高手。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

大家好,又见面了,我是沐风晓月,本文是专栏【linux基本功-基础命令实战】的第57篇文章。

专栏地址:[linux基本功-基础命令专栏] , 此专栏是沐风晓月对Linux常用命令的汇总,希望能够加深自己的印象,以及帮助到其他的小伙伴😉😉。

如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。

🏠个人主页:我是沐风晓月
🧑个人简介:大家好,我是沐风晓月,双一流院校计算机专业😉😉
💕 座右铭: 先努力成长自己,再帮助更多的人 ,一起加油进步🍺🍺🍺
💕欢迎大家:这里是CSDN,我总结知识的地方,喜欢的话请三连,有问题请私信😘

一、tcpdump 命令介绍

  很多时候由于网络连接出现问题,使用 ping 命令无法找到故障点,比如在复杂的网络环境中,ping 命令可能运行非常缓慢甚至失效,这个时候怎么办呢?

最简单的办法就是分析网络数据包的流向,通过分析数据包流向,能够了解一条连接是如何进行双向连接的,也能清楚预测出来可能发生的问题。

  tcpdump 是 Linux 系统上最为强大的网络数据抓包和采集分析工具之一,本质上是通过调用 libpcap 库的各种 API 来实现数据包的监听,它不仅可以分析网络数据包的流向,也可以监听网络数据包的内容,如果数据包是明文传输,tcpdump 可以在路由器上作为监听敏感信息的黑客工具。

在实际工作中,一般先用 tcpdump 工具抓包,再用 Wireshark 进行分析,tcpdump 仅支持命令行格式使用,运行在用户态而且必须使用 root 身份执行,如果你是普通用户身份登录系统,请运行 sudo su root 命令切换到 root 用户执行该命令。

  使用 tcpdump 命令最好掌握较为扎实的 TCP/IP 基础知识,如果想要全面详细了解这个命令,请访问 tcpdump 工具手册官网地址:https://www.tcpdump.org/manpages/tcpdump.1.html

首先需要安装 tcpdump 工具,本文实验是基于 tcpdump 4.9.2 版本进行演示,现在列出在 centos 系统和 ubuntu 系统的参考命令:

[root@mufeng101 ~]# yum install -y tcpdump         #centos系统
[root@mufeng101 ~]# apt-get install -y tcpdump     #ubuntu系统

二、语法格式及常用选项

tcpdump[ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen] [ -T 类型 ] [ -w 文件名 ] [表达式 ]

  由于tcpdump命令说明手册内容过于庞大,为了清晰直观,突出重点,本文对常用的命令参数分为四类,列举如下:

2.1文件操作参数

参数 描述
-nn 直接以IP及port号码显示,而非显示主机名与服务名称
-w 将监听所得到的数据包内容存储下来,输出结果至文件
-W 指定输出文件的最大数量,到达后会重新覆写第1个文件
-r 读取一个抓包文件
-C 限制输入文件的大小,超出以后后缀加1等数字的形式递增,注意单位是1000000字节
-G 指定每隔N秒就重新输出至新文件,注意-w参数应该基于strftime参数指定文件名

2.2 监听及停止条件参数

参数 描述
-D 列举所有网卡设备
-i 后面接要监听的网络接口设备,例如eth0、lo、ppp0等的界面
-c 监听的数据包数,如果没有这个参数,tcpdump会持续不断监听
-s 指定每条报文的最大字节数,默认是262144字节,可以设置大小
–time-stamp-precision 制定捕获时的时间精度,默认是毫秒级micro,可选选择纳秒nano

2.3 输出时间戳格式参数

参数 描述
-t 不显示时间戳
-tt 自1970年1月1日0点至今的秒数
-ttt 显示邻近两行报文间经过的秒数
-tttt 自第一个监听的报文起经历的秒数

2.4 分析信息详情参数据

参数 描述
-e 使用数据链路层(OSI第二层)的MAC数据包数据来显示
-q 仅列出较为简单的数据包信息,每一行的内容比较精简
-v 显示网络层头部更多的信息,如TTL、id等
-n 显示IP地址、数字端口代替hostname等
-S TCP 信息以绝对序列号代替相对序列号
-A 数据包的内容以ASCII格式显示,通常用来监听WWW网页数据包数据
-x 以16进制方式显示报文内容,不显示数据链路层
-xx 以16进制方式显示报文内容,显示数据链路层
-X 可以列出十六进制(hex)以及ASCII的数据包内容,不显示数据链路层
-XX 可以列出十六进制(hex)以及ASCII的数据包内容,显示数据链路层

三、参考案例

  在主机上面直接输入tcpdump命令通常默认监听Linux系统第一个网卡网络数据包,只有在命令后面加上特定参数或者过滤表达式才能按照指定条件监听设备的网络数据包,下面列举几个例子:

3.1 查看本机全部网卡信息

  如果我们想快速查看本机全部网卡设备信息,使用tcpdump代替ifconfig会更加高效,包括网桥设备(br0、docker0)、虚拟机网卡(virbr0)、蓝牙网卡(bluetooth0)、usb总线接口(usbmon1、usbmon2)、本机网卡(ens33)、回环地址(lo)等常见设备信息,系统对查询出的全部网卡接口设备进行编号。

[root@mufeng101 ~]# tcpdump -D
1.br0
2.virbr0
3.docker0
4.bluetooth0 (Bluetooth adapter number 0)
5.nflog (Linux netfilter log (NFLOG) interface)
6.nfqueue (Linux netfilter queue (NFQUEUE) interface)
7.usbmon1 (USB bus number 1)
8.usbmon2 (USB bus number 2)
9.ens33
10.any (Pseudo-device that captures on all interfaces)
11.lo [Loopback]      

3.2 监听指定网卡设备上的数据包信息

  监听ens33网卡上的全部网络数据包,需要显示IP及PORT号码,持续收到6条数据包以后自动停止(如果没有指定数据包数或者持续时间,可以在键盘直接按下ctrl-c结束)

[root@mufeng101 ~]# tcpdump -i ens33 -nn -c 6
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
21:34:49.795298 IP 192.168.31.110.22 > 192.168.31.60.60114: Flags [P.], seq 2828768596:2828768784, ack 2755628968, win 259, options [nop,nop,TS val 23321858 ecr 5968858], length 188
21:34:49.795485 IP 192.168.31.60.60114 > 192.168.31.110.22: Flags [.], ack 188, win 4096, options [nop,nop,TS val 5968899 ecr 23321818], length 0
21:34:49.795639 IP 192.168.31.110.22 > 192.168.31.60.60114: Flags [P.], seq 188:552, ack 1, win 259, options [nop,nop,TS val 23321858 ecr 5968899], length 364
21:34:49.795756 IP 192.168.31.110.22 > 192.168.31.60.60114: Flags [P.], seq 552:748, ack 1, win 259, options [nop,nop,TS val 23321858 ecr 5968899], length 196
21:34:49.795838 IP 192.168.31.60.60114 > 192.168.31.110.22: Flags [.], ack 748, win 4100, options [nop,nop,TS val 5968900 ecr 23321858], length 0
21:34:49.795911 IP 192.168.31.110.22 > 192.168.31.60.60114: Flags [P.], seq 748:1096, ack 1, win 259, options [nop,nop,TS val 23321858 ecr 5968900], length 348
6 packets captured                            #监听的数据包个数
6 packets received by filter                  #过滤的数据包个数
0 packets dropped by kernel                   #丢弃的数据包个数

  上述tcpdump命令监听、分析的是网络数据包的报头信息,输出格式是:
“时间戳 协议 源地址.源端口 > 目的地址.目的端口 网络包详细信息”,现在以结果信息中加粗的特殊行为例进行详解:

  • 21:34:49.795639 代表数据包被捕获的时间,单位是"时:分:秒";
  • IP代表使用的通信协议是IP,传输IP地址是192.168.31.110,传输端口是22,大于(>)符号代表数据包的传输方向;
  • 接收端IP是192.168.31.60,接收端口为60114;
  • Flags [P.]表示这个数据包是采用推送的方式,seq 188:552 表示包序号,传输数据为整体数据的188-552byte;
  • win 259表示滑动窗口大小为259,length 0表示承载的数据长度,如果没有数据则为0。

  需要说明的是,数据包的传输标志一共有五种,具体含义如下所示:

姓名 年龄 工作
[S] SYN 开始连接
[P] PSH 推送数据
[F] FIN 结束连接
[R] RST 重启连接
[.] 没有标记 除了 SYN 包外所有的数据包都有ACK,所以一般这个标志也可表示 ACK

3.3 将监听的数据包数据保存至文件

  使用tcpdump监听经过ens33网卡的数据包,将数据包每隔3秒时长写入一个特定格式文件(文件生成格式定义为def%M-%S),并且读取其中一个生成文件的内容:

[root@mufeng101 ~]# tcpdump -i ens33 -G 3 -w def%M-%S
tcpdump: listening on ens33, link-type EN10MB (Ethernet), capture size 262144 bytes
^C19 packets captured
32 packets received by filter
0 packets dropped by kernel
[root@mufeng101 ~]# ll def*
-rw-r--r-- 1 tcpdump tcpdump   24 Mar 28 12:04 def03-57
-rw-r--r-- 1 tcpdump tcpdump  394 Mar 28 12:04 def04-11
-rw-r--r-- 1 tcpdump tcpdump   24 Mar 28 22:09 def09-08
......
[root@mufeng101 ~]# tcpdump -r def04-11                     
reading from file def04-11, link-type EN10MB (Ethernet)
12:04:11.516324 IP XiaoQiang.52822 > mufeng101.ssh: Flags [.], ack 1352187868, win 4095, options [nop,nop,TS val 15707391 ecr 4655641], length 0
......

四、tcpdump条件表达式详解

  tcpdump过滤条件表达式符合正则表达式规范,过滤原理涉及linux内核,这里我们不展开讲解。

我们只要知道tcpdump支持使用一个或者多个过滤表达式对满足表达式条件网络数据包进行过滤,掌握常用过滤表达式固定写法即可满足大部分的场景需要,表达式按照功能可以划分为六大过滤类型:

(1)主机过滤

  host、src host、dst host:设置主机、来源主机、目的主机作为过滤条件,例如:tcpdump -nn host 192.168.31.101 代表过滤指定主机IP地址的网络数据包。

(2)网络过滤

  net、src net、dst net: 设置网段、来源网段、目的网段作为过滤条件,例如:tcpdump net -nn 192.168.0.0代表过滤指定网段的网络数据包

(3)端口过滤

  port、src port、dst port、portrange:设置端口、来源端口、目的端口、端口范围作为过滤条件,例如:tcpdump -nn dst port 80 代表过滤从目的端口80发来的网络数据包

(4)协议过滤

  可以指定网络协议类型,包括ether、fddi、tr、wlan、ip、ip6、arp、rarp、tcp、udp、icmp、igmp、icmp、igrp、pim、ah、esp、vrrp等,例如:tcpdump -nn icmp or tcp代表过滤icmp协议或者tcp协议数据包。

(5)逻辑表达式过滤

  and(&&)、or(||)、not(!): 分别代表并且、或者、非逻辑运算,例如:tcpdump ‘src host 192.168.31.101 and dst port 8080’ 代表监听源IP是192.168.31.101主机发送给目的端口8080的所有数据包。

(6)特定状态过滤

  tcp[tcpflas]: 按照tcp指定状态标志位进行过滤,例如: tcpdump -i eth0 -nn ‘tcp[tcpflags] == tcp-syn or tcp[tcpflags] == tcp-ack’ 代表希望同时捕获syn类型和ack类型的数据包

  其他常用功能限定词:

  gateway:过滤通过指定网关地址的数据包,例如:tcpdump gateway 192.168.0.1 代表过滤指定网关数据包;

  broadcast: 过滤广播数据包,例如:tcpdump ether broadcast 代表过滤以太网广播数据包;

  multicast: 过滤多播数据包,例如:tcpdump ip multicast 代表过滤IP广播数据包;

  less、greater:小于或者大于,例如:tcpdump greater 64 代表过滤大于64byte的数据包;

五. 面试题

  如何使用tcpdump命令实现如下监控目标:1.监听来自ens33网卡数据,通信协议为port 22,目标数据包来源为192.168.31.101的数据包,请给出正确答案。

  答案:tcpdump -i eth0 -nn ‘port 22 and src 192.168.1.101’

总结

  以上就是常用的过滤表达式类型,复杂表达式都是上述简单表达式的逻辑组合,希望大家能够在运维实际工作中多加练习,逐步深入掌握TCP/IP网络知识。文章来源地址https://www.toymoban.com/news/detail-778957.html

到了这里,关于实践tcpdump命令,成为网络数据抓包高手的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 如何使用tcpdump命令抓包

    个人主页 : ζ小菜鸡 大家好我是ζ小菜鸡,小伙伴们,让我们一起来学习如何使用tcpdump命令抓包。 如果文章对你有帮助、 欢迎关注、点赞、收藏(一键三连) host:主机,port:端口,src:源IP,src port:源端口,dst:目的IP,dst port:目的端口,net:网段,eth:网口,tcp:协议 -i:指定监听的网络接口 -c

    2024年02月07日
    浏览(46)
  • tcpdump抓包规则命令大全

    下面的例子全是以抓取eth0接口为例,如果不加-i eth0是表示抓取所有的接口包括lo。   tcpdump -nnnv arp                 # 查找ARP攻击时确定攻击原MAC地址时常用。 tcpdump -nnnv udp port 53    # DNS服务器53端口受ARP攻击时查看攻击源时用。 tcpdump -nnnv udp and not port 53      # 可以确定

    2024年02月05日
    浏览(42)
  • 抓包之linux下tcpdump命令

    tcpdump 是Linux系统下的一个强大的命令,可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 命令行参数介绍: -A 以ASCII格式打印出所有分组,并将链路层的头最小化

    2024年04月23日
    浏览(42)
  • 使用tcpdump命令进行抓包+详细示例

    tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 可以将tcpdump理解为一个具有抓取数据包功能的命令。 tcpdump命令跟其他的Linux命令的使用类似,需

    2024年02月08日
    浏览(44)
  • 计算机网络抓包工具——tcpdump详解

    目录 一、tcpdump是什么? 二、tcpdump里常用参数 1、可接的选项  2、type类过滤器【参数】 tcpdump是Linux里的字符界面的数据抓包分析软件。tcpdump是一个用于截取网络分组,并输出分组内容的工具。 tcpdump:其中tcp:传输控制协议,位于传输层transmission control protocol。dump:导出

    2024年02月08日
    浏览(67)
  • 【网络抓包工具】tcpdump 最新版本移植到开发板(海思平台)

    tcpdump 是一个功能强大的,用于抓取网络数据包的命令行工具,与带界面的 Wireshark 一样,基于 libpcap 库 (一个用于网络流量捕获的可移植C/C++库) 构建。 tcpdump 的设计目标是帮你分析包头(比如Tcp包头,udp包头),同时你可以根据包头,用它支持的表达式,过渡出你感兴趣的包

    2024年02月01日
    浏览(49)
  • tcpdump 抓包和记录、tshark 过滤抓包

    目录 tcpdump 一、包名 二、可用参数 tcpdump -nn    tcpdump -nn -i  网卡名   —— 指定显示的网卡 tcpdump -nn  -i  网卡名  port   端口名    ——  指定显示的端口  tcpdump -nn  -i  网卡名  not  port   端口名   ——  排除指定的端口不显示 tcpdump -nn  -i  网卡名  port   端口名

    2024年02月09日
    浏览(42)
  • tcpdump进行IP抓包

    在学习《Linux高性能服务器编程》中,看到作者对IP头部使用 tcpdump 进行抓包,所以本着实践出真知、多看多练的道理,也进行抓包,顺带记录一下。 注意这里的IP协议都是指IPv4协议。 IP协议可以说是网络通讯中最重要的协议之一,所以了解IP数据包的结构是非常有必要的。

    2024年02月05日
    浏览(33)
  • tcpdump抓包

    1、tcpdump的选项 2、tcpdump的表达式介绍 4、tcpdump示例 5、过滤主机 6、过滤端口 7、过滤协议 8、常用表达式 9、tcpdump的过滤表达式 10、在嵌入式设备中使用tcpdump 11、抓包循环写入文件 12、tcpdump按进出方向抓包

    2024年04月17日
    浏览(32)
  • tcpdump 抓包

    一、Tcpdump抓包 抓取端口为2008的数据包   抓包文件内容   抓取到的内容保存在文件中,可以通过wireshark分析 二、tcpdump的一些命令  tcpdump和ethereal可以用来获取和分析网络通讯活动,他们都是使用libpcap库来捕获网络封包的。 ​在混杂模式下他们可以监控网络适配器的所有通

    2023年04月21日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包