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、第一个抓包示例

[[email protected] ~]# 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  [email protected]@.D.....
    0x0010:  7040 3dba 0016 90ab c727 1e02 7728 bf1f  [email protected]=......‘..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的抓包
[[email protected] ~]# 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的抓包
[[email protected] ~]# 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中提供了全缓冲行缓冲无缓冲三种缓冲方式。标准错误是不带缓冲的,而终端设备常为行缓冲,其他默认则为全缓冲。

[[email protected] ~]# 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 输出不加时间戳

[[email protected] ~]# 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

[[email protected] ~]# 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 显示详细信息

[[email protected] ~]# 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选项后,会在输出的内容中增加tosttlidoffset协议编号总长度等,如需要理解这些信息,就需要了解TCP/IP协议中的头的具体定义了。

6、-F 指定过滤表达式所在的文件

? ? 在第一个示例中,命令行增加了‘port 22‘,而这一项就叫过滤条件,如果设置了过滤条件,则tcpdump只抓取满足过滤条件的数据包。如需要设置较为复杂的过滤条件或复用过滤条件时,这时可以将过滤条件保存为文件,然后通过-F加载该过滤文件。

[[email protected] ~]# cat tcpdumpFilter.txt
port 22

[[email protected] ~]# 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 将原始数据包信息保存到文件中

[[email protected] ~]# 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

[[email protected] ~]# cat tcpdumpRAW
?2?ˉOW[?
        ˊ?ev??ZE?c&@@[email protected]<J?Du???P???W?.[?OG??F ??C?>{d6toв?w厸§Ng}???O?6I}+/l??
                                                                         G?Z?°}_`a5±?z
寂Y凢

? ? 当我们查看保存的文件时,出现的是乱码。则代表无法直接查看,很有可能是二进制文件。那么怎么查看保存的文件了?请看下一个示例。

[[email protected] ~]# file tcpdumpRAW
tcpdumpRAW: tcpdump capture file (little-endian) - version 2.4 (Ethernet, capture length 262144)

7、 -r 从文件中读取原始数据包

[[email protected] ~]# tcpdump -r ~/tcpdumpRAW
reading from file /root/tcpdumpRAW, link-type EN10MB (Ethernet)
00:11:27.838878 IP localhost.localdomain.ssh > 112.64.60.194.19101: Flags [P.], seq 3091494399:3091494547, ack 4113686720, win 251, length 148

? ? 通过-w和-r选项即可实现抓包的录制回放功能。

本文同步在微信订阅号上发布,如各位小伙伴们喜欢我的文章,也可以关注我的微信订阅号:woaitest,或扫描下面的二维码添加关注:

原文地址:https://www.cnblogs.com/surpassme/p/9380087.html

时间: 2024-11-09 14:44:48

Linux 基础教程 29-tcpdump命令-1的相关文章

Linux 基础教程 32-解压缩命令

? ? 将文件压缩后对提升数据传输效率,降低传输带宽,管理备份数据都有非常重要的功能,因此文件压缩解压技能就成为必备技能.相对于Windows中的文件解压缩工具百花争艳,在Linux中的解压缩工具则要少很多,常用的解压缩命令主要为gzip.bzip2.tar.zip等等. gzip命令 gzip只能针对普通文件进行压缩和解压,对于文件夹,符号链接等是不支持的.基本语法如下所示: gzip [选项] [文件] 常用参数如下所示: 参数 说明 -d , --decompress 解压文件 -f ,

初识 Linux 文件权限--Linux基础教程

初识 Linux 文件权限--Linux基础教程 在 Linux 中最基本的任务之一就是设置文件权限.理解它们是如何实现的是你进入 Linux 世界的第一步.如您所料,这一基本操作在类 UNIX 操作系统中大同小异.实际上,权限系统就直接取自于 UNIX 文件权限(甚至使用许多相同的工具). 但不要以为理解文件权限需要长时间的学习.事实上会很简单,让我们一起来看看你需要了解哪些内容以及如何使用它们. 基础概念 你要明白的第一件事是文件权限可以用来干什么.当你设置一个分组的权限时发生了什么?让我们

Linux makefile教程之书写命令四[转]

书写命令———— 每 条规则中的命令和操作系统Shell的命令行是一致的.make会一按顺序一条一条的执行命令,每条命令的开头必须以[Tab]键开头,除非,命令是紧跟 在依赖规则后面的分号后的.在命令行之间中的空格或是空行会被忽略,但是如果该空格或空行是以Tab键开头的,那么make会认为其是一个空命令. 我们在UNIX下可能会使用不同的Shell,但是make的命令默认是被“/bin/sh”——UNIX的标准Shell解释执行的.除非你特别指定一个其它的Shell.Makefile中,“#”是

Linux基础系统优化及常用命令

# Linux基础系统优化及常用命令 [TOC] ## Linux基础系统优化 Linux的网络功能相当强悍,一时之间我们无法了解所有的网络命令,在配置服务器基础环境时,先了解下网络参数设定命令. - ifconfig 查询.设置网卡和ip等参数- ifup,ifdown 脚本命令,更简单的方式启动关闭网络- ip 符合指令,直接修改上述功能 ```bash在我们刚装好linux的时候,需要用xshell进行远程连接,那就得获取ip地址,有时候网卡默认是没启动的,Linux也就拿不到ip地址,因

Linux基础--进程管理相关命令介绍(2)

本文主要介绍了Linux中进程管理的相关命令,涉及到的主要命令有top,vmstat等. (1)top ①功能:用来查看CPU,内存以及进程的状态. ②用例: ③相关注释: load average表示负载,三个数值分别表示第1分钟,第5分钟,第10分钟 Cpu中us表示用户空间程序占用百分比,sy表示内核模式占用百分比,ni表示调整NICE值所占用的    CPU百分比,id表示CPU的空闲比例,wa表示等待磁盘IO完成所占用的时间比例,hi表示硬件中断占     据的百分比,si表示软中断所

Linux基础01 学会使用命令帮助

Linux基础01 学会使用命令帮助 概述 在linux终端,面对命令不知道怎么用,或不记得命令的拼写及参数时,我们需要求助于系统的帮助文档:linux系统内置的帮助文档很详细,通常能解决我们的问题,我们需要掌握如何正确的去使用它们:在只记得部分命令关键字的场合,我们可通过man -k来搜索:需要知道某个命令的简要说明,可以使用whatis:而更详细的介绍,则可用info命令:查看命令在哪个位置,我们需要使用which:而对于命令的具体参数及使用方法,我们需要用到强大的man:下面分别介绍: 命

Linux基础--进程管理相关命令介绍(1)

本文主要介绍了Linux中进程管理的相关命令,涉及到的主要命令有pstree,ps. (1)pstree ①功能:用来查看进程树 ②用例: (2)ps ①功能:用来显示系统当前进程状态的命令 ②用例: ③相关用法: ps a:显示所有跟终端相关的进程 ps x:显示所有跟终端无关的进程 相关注释: STAT各代码含义: S:可中断的睡眠态 D:不可中断的睡眠态 R:运行或可运行 T:停止 Z:僵死 s:session leader l:多线程进程 +:前台进程 N:低优先级进程 <:高优先级进程

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec

Linux基础教程 linux中使用find命令搜索文件常用方法记录

find是linux非常强大的搜索命令,通过man find查看find手册,可以发现find的说明一屏接一屏,估计要看完也得花不少时间.兄弟连Linux培训 小编总结了下,整理出find常用的使用方法. 1.命令格式 find 搜索路径 搜索表达式 搜索路径:这个比较容易理解,就是指定的搜索目录,比如/etc.搜索路径也可以同时指定多个,用空格分开就可以了,如/etc /home. 搜索表达式:find命令关键就是在表达式上,表达式的选项非常多.以下命令测试主要根据表达式的选项来划分. 2.命

linux基础知识及相关命令

Linux基础 red hat linux 安装及服务基础 关iptables防火墙:  chkconfig iptables off 关闭selinux: 打开/etc/sysconfig/selinux文件 修改"SELINUX=disabled" Linux启动过程: 1.开机blos自检 2.MBR引导 MBR(主引导记录 位于磁盘0柱面 0磁道 1扇区,共512字节)512=446(GRUB引导器)+64(分区表)+2(结束校验标记) 3.GRUB菜单启动:对应文件在/boo