Linux 基础教程 29-tcpdump命令-1
什么是tcpdump
在Linux中输入命令man tcpdump给出的定义如下所示:
tcpdump - 转储网络上的数据流
是不是感觉很懵?我们用通俗、形象、学术的表达方式来全方位描述tcpdump:
- 通俗的来说,tcpdump是一个抓包工具,用于抓取网络中传输的数据包
- 形象的来说,tcpdump如同国家海关,凡是入境和出境的货物,海关都要抽样检查,看看里面具体是什么货物
- 学术的来说,tcpdump是一种Sniffer(嗅探器),利用以太网的特性,通过将网络设备置于混杂模式来获取传输在网络中的信息包
在使用tcpdump需要了解以下的知识点:
1、了解和使用过Linux系统
2、学习OSI七层协议和作用
3、熟悉网络协议,特别是IP/TCP/UDP
4、了解交换机、路由器所对应的协议层且知道两者的差异
基本语法
tcpdump [选项] [网络接口]
常用选项如下所示:
选项 | 说明 |
---|---|
-A | 只显示ASCII形式的数据包内容 |
-c | 就是Count的含义,指在接收到指定数量的分组包后退出,简单来说就是允许抓几个包 |
-d | 将匹配信息包的编码以人们能够理解的格式进行显示并退出 |
-dd | 将匹配信息包的编码以C语言程序段的格式显示 |
-ddd | 将匹配信息包的编码以十进制的形式显示 |
-D | 列出所有可以选择的抓包对象 |
-e | 添加数据链路层的头部信息 |
-F | 指定过滤表达式所在的文件 |
-i | 即interface,指定监听的网络接口 |
-l | 将输出变为行缓冲模式 |
-n | 不将主机地址转换为名字 |
-nn | 不转换协议和端口号,当tcpdump遇到协议号或端口号,不需要将这些数字转换为对应的协议名称或端口名称,如22端口SSH端口,我们希望显示22,而非SSH |
-p | 将网络接口设置为非混杂模式 |
-q | 快速输出,仅输出较少的协议信息 |
-r | 从文件中读取原始数据包,而这个文件通过由选项 -w 所产生 |
-t | 在每一行中不输出时间戳 |
-tt | 在每一行中输出非格式化的时间戳 |
-ttt | 在每一行中输出本行与前一行的时间差,单位为ms |
-tttt | 在每一行中输出由date处理的默认格式的时间戳 |
-ttttt | 在每一行中输出本行与第一行的时间差,单位为ms |
-v | 显示更详细的信息 |
-w | 将原始数据包信息保存到文件中 |
-X | 将协议头和包内容原原本本的显示出来 |
示例
如果要使用tcpdump抓包,一定要切换到root账户中。
1、第一个抓包示例
[root@localhost ~]# tcpdump -i ens5f1 -nn -X 'port 22' -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
22:34:11.334916 IP 192.168.8.8.22 > 112.64.61.186.37035: Flags [P.], seq 3341229570:3341229782, ack 1999159071, win 31152, length 212
0x0000: 4510 00fc 7e99 4000 4006 44a8 c0a8 0808 E...~.@.@.D.....
0x0010: 7040 3dba 0016 90ab c727 1e02 7728 bf1f p@=......'..w(..
0x0020: 5018 79b0 7799 0000 0000 00b0 823d 4cf1 P.y.w........=L.
0x0030: 1108 58fc 3686 2bd2 5220 fe37 85ab 74cc ..X.6.+.R..7..t.
0x0040: bfb1 8831 7d1c 3b57 52ae aa91 28a2 67d8 ...1}.;WR...(.g.
0x0050: 08fb a257 7fc8 7186 39dc d266 3d32 cce8 ...W..q.9..f=2..
0x0060: 3eb7 130b a7d3 833b 59c9 bdf8 2141 6863 >......;Y...!Ahc
0x0070: 7cae 25ff 459e c94a a635 7098 6925 db48 |.%.E..J.5p.i%.H
0x0080: a9b0 32ab 5393 737f cf8c f2ed b47a 7d8b ..2.S.s......z}.
0x0090: 346c 39df 3ecc d2b0 e0ad 5104 272d 6513 4l9.>.....Q.'-e.
0x00a0: 4b8d 5ee6 6c7d 9477 e40b 8637 996a bb5a K.^.l}.w...7.j.Z
0x00b0: 471a 2ac4 3335 266d 0485 2e52 b2c2 f6e8 G.*.35&m...R....
0x00c0: 0549 5ae0 9c7b ad45 da0a eef2 1ccb b2ac .IZ..{.E........
0x00d0: a4a2 0a96 cc5f 238c 9570 0d15 984e 6f58 ....._#..p...NoX
0x00e0: d8ff 8034 1165 cf44 02e4 ed6b 631e 2548 ...4.e.D...kc.%H
0x00f0: 56fd 4c8a 664c e5ee d845 2e50 V.L.fL...E.P
1 packet captured
1 packet received by filter
0 packets dropped by kernel
-i : 指定用来抓包的网络接口,这个参数在服务器有多个网卡的时候非常有效
-nn : 不转换协议和端口号,当tcpdump遇到协议号或端口号,不需要将这些数字转换为对应的协议名称或端口名称,如22端口SSH端口,我们希望显示22,而非SSH
-X : 将协议头和包内容原原本本的显示出来,tcpdump会同时以16进制和ASCII的形式进行显示,在协议分析时非常好用。
'port 22' : 告诉tcpdump要有选择的显示所抓到的包,在该示例中,只显示源端口或目的端口是22的数据包,其他的数据包则不显示。
-c : 用来指定抓包的个数,示例设置的个数为1,则代表仅抓取一个包之后就退出不再抓包了。
2、-e 增加数据链路层的头部信息
- 不带-e的抓包
[root@localhost ~]# tcpdump -i ens5f1 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:44:06.918259 IP localhost.localdomain.ssh > 112.64.61.186.37035: Flags [P.], seq 3341233794:3341234006, ack 1999165283, win 31152, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel
- 带-e的抓包
[root@localhost ~]# tcpdump -i ens5f1 -c 1 -e
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:45:51.114314 dc:fe:18:65:76:f2 (oui Unknown) > 34:97:f6:5a:50:e0 (oui Unknown), ethertype IPv4 (0x0800), length 82: 112.85.42.197.20263 > localhost.localdomain.ssh: Flags [P.], seq 254675888:254675904, ack 306708143, win 155, options [nop,nop,TS val 3668622988 ecr 391712180], length 16
1 packet captured
8 packets received by filter
0 packets dropped by kernel
通过两个命令的输出对比,可以看到增加-e选项后,输出的结果中增加MAC地址信息。而且在输出内容中会有oui Unknown,OUI即Organizationally unique identifier(组织唯一标识符),在任何一块网卡中烧录的6字节MAC地址中,前3个字节体现了OUI,其表明了网卡的制造组织,通常情况下,该标识符是唯一的。在本例中,由于没有识别出网卡的制造商,因此显示为Unknown。
3、-l 将输出变为行缓冲模式
-l的作用是将tcpdump的输出行为变为行缓冲方式,这样可以保证tcpdump遇到换行符,就立即将缓冲的内容输出到标准输出(stdout),方便利用管道或重定向方式进行后续处理,而不会造成延迟。
在Linux的标准I/O中提供了全缓冲、行缓冲、无缓冲三种缓冲方式。标准错误是不带缓冲的,而终端设备常为行缓冲,其他默认则为全缓冲。
[root@localhost ~]# tcpdump -i ens5f1 -l -c 5 | awk '{print $5}'
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
112.64.61.186.37035:
gateway.domain:
localhost.localdomain.49348:
gateway.domain:
localhost.localdomain.ssh:
5 packets captured
13 packets received by filter
0 packets dropped by kernel
在该例中,将tcpdump输出的内容通过管道提取第5列,可以用来查看详细的连接信息。而如果不加 -l 选项时,则只有当缓冲区全部占满时,tcpdump才会将缓冲区中的内容输出,这样就有可能导致输出不连续的,如果强行结束,则会影响下一行的完整性。
4、-t 输出不加时间戳
[root@localhost ~]# tcpdump -i ens5f1 -c 1
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:48:03.193526 IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091447763:3091447975, ack 4113666212, win 251, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel
[root@localhost ~]# tcpdump -i ens5f1 -c 1 -t
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091448643:3091448855, ack 4113666488, win 251, length 212
1 packet captured
6 packets received by filter
0 packets dropped by kernel
在增加选项-t选项后,时间23:48:03.193526就消失了。tcpdump默认情况下是按微秒来计时,因此最一个时间精确到了第6位。
5、 -v 显示详细信息
[root@localhost ~]# tcpdump -i ens5f1 -c 1 -v
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
23:53:13.252748 IP (tos 0x10, ttl 64, id 24820, offset 0, flags [DF], proto TCP (6), length 188)
localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], cksum 0x7661 (incorrect -> 0x2474), seq 3091449471:3091449619, ack 4113666972, win 251, length 148
1 packet captured
7 packets received by filter
0 packets dropped by kernel
在增加-v选项后,会在输出的内容中增加tos、ttl、id、offset、协议编号、总长度等,如需要理解这些信息,就需要了解TCP/IP协议中的头的具体定义了。
6、-F 指定过滤表达式所在的文件
在第一个示例中,命令行增加了'port 22',而这一项就叫过滤条件,如果设置了过滤条件,则tcpdump只抓取满足过滤条件的数据包。如需要设置较为复杂的过滤条件或复用过滤条件时,这时可以将过滤条件保存为文件,然后通过-F加载该过滤文件。
[root@localhost ~]# cat tcpdumpFilter.txt
port 22
[root@localhost ~]# tcpdump -i ens5f1 -c 1 -v -F ~/tcpdumpFilter.txt
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
00:05:52.685555 IP (tos 0x10, ttl 64, id 25291, offset 0, flags [DF], proto TCP (6), length 188)
localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], cksum 0x7661 (incorrect -> 0x827b), seq 3091492507:3091492655, ack 4113685300, win 251, length 148
1 packet captured
3 packets received by filter
0 packets dropped by kernel
7、 -w 将原始数据包信息保存到文件中
[root@localhost ~]# tcpdump -i ens5f1 -c 1 -v -F ~/tcpdumpFilter.txt -w ~/tcpdumpRAW
tcpdump: listening on ens5f1, link-type EN10MB (Ethernet), capture size 262144 bytes
1 packet captured
1 packet received by filter
0 packets dropped by kernel
[root@localhost ~]# cat tcpdumpRAW
Ճ²¡¯OW[ߌ
ˊݾev
Linux 基础教程 29-tcpdump命令-1的更多相关文章
- Linux 基础教程 37-进程命令
pidof 我们知道每个小孩一出生就会一个全国唯一的编号来对其进行标识,用于以后上学,办社保等,就是我们的身份证号.那么在Linux系统中,用来管理运行程序的标识叫做PID,就是大家熟知的进程 ...
- Linux 基础教程 32-解压缩命令
将文件压缩后对提升数据传输效率,降低传输带宽,管理备份数据都有非常重要的功能,因此文件压缩解压技能就成为必备技能.相对于Windows中的文件解压缩工具百花争艳,在Linux中的解压缩工具则要 ...
- Linux基础 - 系统优化及常用命令
目录 Linux基础系统优化及常用命令 Linux基础系统优化 网卡配置文件详解 ifup,ifdown命令 ifconfig命令 ifup,ifdown命令 ip命令 用户管理与文件权限篇 创建普通 ...
- Linux基础系统优化及常用命令
# Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ...
- 嵌入式LINUX基础教程 第2版
嵌入式LINUX基础教程 第2版 目录 第1章 入门 11.1 为什么选择Linux 11.2 嵌入式Linux现状 21.3 开源和GPL 21.4 标准及相关组织 31.4.1 Linux标准基 ...
- Linux基础01 学会使用命令帮助
Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题, ...
- Linux基础教程 linux中使用find命令搜索文件常用方法记录
find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方 ...
- Embedded Linux Primer----嵌入式Linux基础教程--2.4节--嵌入式Linux发行版
嵌入式Linux发行版 究竟什么是Linux发行版?在Linux内核引导之后,它期望找到并挂载根文件系统.当一个匹配的根文件系统已经挂载上,启动脚本开始运行大量程序和系统要求的工具.这些程序经常调用其 ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...
- Linux基础:用tcpdump抓包
简介 网络数据包截获分析工具.支持针对网络层.协议.主机.网络或端口的过滤.并提供and.or.not等逻辑语句帮助去除无用的信息. tcpdump - dump traffic on a netwo ...
随机推荐
- Phonegap Android 项目使用Cordova
要在已经创建好的Android项目里,使用Cordova. 1. 首先在Android Studio中创建Android项目 2. 创建cordova项目 cordova crate test com ...
- Panabit Live CD使用说明
为了方便更多的用户实际使用Panabit,省去安装FreeBSD和Panabit等步骤,自2007年9月,即Panabit V7.09起,Panabit网站发布Panabit标准版安装包时,同步发布相 ...
- 《js笔记》
1.判断浏览器是否启用cookie: if (navigator.cookieEnabled==true) { alert("已启用 cookie") } else { alert ...
- VMware vSphere Client下增加虚拟机磁盘空间的方法
随着系统运维时间的增长,磁盘就日益的损耗,如果遇到虚拟机报磁盘空间不足怎么办?还好,我们可以通过磁盘阵列增加磁盘空间,然后扩容到虚拟机中去. 对于linux虚拟机磁盘扩容的方案有两种,一种就是原有的实 ...
- 自定义Hibernate Validator约束
定义注解 实现一个只能输入指定状态的约束条件 import javax.validation.Constraint; import javax.validation.Payload; import j ...
- 39. Combination Sum + 40. Combination Sum II + 216. Combination Sum III + 377. Combination Sum IV
▶ 给定一个数组 和一个目标值.从该数组中选出若干项(项数不定),使他们的和等于目标值. ▶ 36. 数组元素无重复 ● 代码,初版,19 ms .从底向上的动态规划,但是转移方程比较智障(将待求数分 ...
- ADO 缓存更新
if (ADOQuery1->UpdateStatus() == usUnmodified) return; ADOQuery1->UpdateBatch(arAll); Update ...
- VS2010生成的文件在别的机器上运行提示“丢失MSVCR100D.dll”<转>
用vs2010编写的程序经常会发生的一个问题.在自己的机器上运行的好好的,但是在别的机器上就会发生没有找到MSVCR100D.dll.这是 个很头疼的问题.对于一些代码量几百行的小程序,我不可能要求其 ...
- generator+列表生成式输出杨辉三角形
杨辉三角形: 1 1 1 1 2 1 1 3 3 1 1 4 ...
- 迷你MVVM框架 avalonjs 0.94发布
本版本主要做了如下改进: 优化ms-if的逻辑,现在描述DOM的顺序是 ms-skip, ms-important, ms-controller, ms-if ... 只要元素存在ms-skip 这个 ...