tcpdump--文字接口数据包捕获器

tcpdump为文字接口数据包捕获器,wireshark为图形接口数据包捕获器。

wireshark 图形接口数据包捕获器
https://blog.csdn.net/weixin_45067241/article/details/127803108?spm=1001.2014.3001.5502

1. tcpdump简介

tcpdump命令是基于Linux系统的命令行的网络数据采集分析工具,可以抓取流动在网卡上的数据包,可列出经过指定网络界面的数据包头文件,它不但可以分析数据包的流向,连数据包的内容也可以监听,tcpdump必须使用root身份执行。

可以用wireshark读取tcpdump生成的pcap文件,用wireshark的图形化界面分析tcpdump结果数据

【问题】iptables限制后,tcpdump还能抓到包吗?
【分析】数据包进入OS及出去的顺序:
网卡nic -》tcpdump -》iptables(netfilter)-》app -》iptables -》网卡nic
【解答】数据包到达网卡之后,tcpdump有能力直接捕获到,不受iptables的影响

2. tcpdump参数

tcpdump参数详解

  • option:可选参数(第三章节介绍)
  • proto类过滤器:根据协议进行过滤,可识别的关键词有tcp, udp, icmp, ip, ip6, arp, rarp,ether,wlan, fddi, tr, decnet (第四章介绍)
  • type类过滤器:可识别的关键词有host, net, port, portrange (第五章介绍)
  • direction类过滤器:根据数据流进行过滤,可是识别的关键词有src、dst,同时,也可以使用逻辑运算符进行组合,比如src or dst
[root@bogon home]# tcpdump --help
tcpdump version 4.9.3
libpcap version 1.9.1 (with TPACKET_V3)
OpenSSL 1.1.1g FIPS  21 Apr 2020
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
		[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
		[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
		[ -Q in|out|inout ]
		[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
		[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
		[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
		[ -Z user ] [ expression ]

3. option参数详情

3.1 设置不解析域名提升速度

  • -n:不把ip转化成域名,直接显示 ip,避免执行 DNS lookups 的过程,速度会快很多
  • -nn:不把协议和端口号转化成名字,直接以IP及port number显示,速度也会快很多
  • -N:不打印出host的域名部分,比如,,如果设置了此选现,tcpdump 将会打印’nic’ 而不是 ‘nic.ddn.mil’

3.2 过滤结果输出到文件

  • 使用-w参数,后接一个.pcap后缀命令的文件名,可以将tcpdump抓到的数据保存到文件中。
[root@bogon home]# tcpdump icmp -w icmp.pcap

3.3 从文件读取包数据

  • 使用-r参数,从.pcap文件中读取数据
[root@bogon home]# tcpdump icmp -r icmp.pcap

3.4 控制详细内容的输出

  • -v:产生详细的输出。比如包的TTL,id标识,数据包长度,以及IP包的一些选项。同时它还会打开一些附加的包完整性检测,比如对IP或ICMP包头部的校验和。
  • -vv:产生比-v更详细的输出.。比如NFS回应包中的附加域将会被打印, SMB数据包也会被完全解码
  • -vvv:产生比-vv更详细的输出。比如 telnet 时所使用的SB, SE 选项将会被打印, 如果telnet同时使用的是图形界面,其相应的图形选项将会以16进制的方式打印出来

3.5 控制时间的输出显示

  • -t :在每行的输出中不输出时间
  • -tt:在每行的输出中会输出时间戳
  • -ttt: 输出每两行打印的时间间隔(以毫秒为单位)
  • -tttt:在每行打印的时间戳之前添加日期的打印(此种选项,输出的时间最直观)

3.6 显示数据包的头部

  • x:以16进制的形式打印每个包的头部数据(但不包括数据链路层的头部)
  • -xx:以16进制的形式打印每个包的头部数据(包括数据链路层的头部)
  • -X:以16进制和 ASCII码形式打印出每个包的数据(但不包括连接层的头部),这在分析一些新协议的数据包很方便
  • -XX:以16进制和 ASCII码形式打印出每个包的数据(包括连接层的头部),这在分析一些新协议的数据包很方便。

3.7 过滤指定网卡的数据包

  • -i:指定要过滤的网卡接口,如果要查看所有网卡,可以 -i any

3.8 过滤特定流向的数据包

  • -Q:选择是入向还是出向的数据包,可选项有:in、out、inout,也可以使用–direction=[direction]这种写法

3.9 其他常用的一些参数

  • -A:数据包的内容以ASCII显示,通常用来抓取WWW的网页数据包数据
  • -I:基于行的输出,便于你保存查看,或者交给其它工具分析
  • -q:仅列出较为简单的数据包信息,每一行的内容比较精简
  • -c:监听的数据包数,-c count捕获count 个包tcpdump就退出,若没有该参数,需要[ctrl] + c 手动退出
  • -s:tcpdump 默认只会截取前 96 字节的内容,要想截取所有的报文内容,可以使用 -s number, number 就是你要截取的报文字节数,如果是 0 的话,表示截取报文全部内容。
  • -S:使用绝对序列号,而不是相对序列号
  • -C:file-size,tcpdump 在把原始数据包直接保存到文件中之前, 检查此文件大小是否超过file-size. 如果超过了, 将关闭此文件,另创一个文件继续用于原始数据包的记录. 新创建的文件名与-w 选项指定的文件名一致, 但文件名后多了一个数字.该数字会从1开始随着新创建文件的增多而增加. file-size的单位是百万字节(nt: 这里指1,000,000个字节,并非1,048,576个字节, 后者是以1024字节为1k, 1024k字节为1M计算所得, 即1M=1024 * 1024 = 1,048,576)
  • -F:使用file 文件作为过滤条件表达式的输入, 此时命令行上的输入将被忽略.

3.10 对输出内容进行控制的参数

  • -D:显示所有可用网络接口的列表
  • -e:使用数据链路层(OSI第二层)的MAC数据包数据来显示
  • -E:揭秘IPSEC数据
  • -L:列出指定网络接口所支持的数据链路层的类型后退出
  • -Z:后接用户名,在抓包时会受到权限的限制。如果以root用户启动tcpdump,tcpdump将会有超级用户权限。
  • -d:打印出易读的包匹配码
  • -dd:以C语言的形式打印出包匹配码
  • -ddd:以十进制数的形式打印出包匹配码

4. proto类过滤器详解

常见的网络协议有:tcp, udp, icmp, http, ip,ipv6 等
protocol 可选值:ip, ip6, arp, rarp, atalk, aarp, decnet, sca, lat, mopdl, moprc, iso, stp, ipx, or netbeui

4.1 查看icmp的包

[root@bogon home]# tcpdump icmp

4.2 查看tcp的包

[root@bogon home]# tcpdump tcp
#1. 查看ipv4的tcp包
[root@bogon home]# tcpdump `ip proto tcp`
[root@bogon home]# tcpdump ip proto 6
[root@bogon home]# tcpdump `ip protochain tcp`
[root@bogon home]# tcpdump ip protochain 6
#2. 查看ipv6的tcp包
[root@bogon home]# tcpdump `ip6 proto tcp`
[root@bogon home]# tcpdump ip6 proto 6
[root@bogon home]# tcpdump `ip6 protochain tcp`
[root@bogon home]# tcpdump ip6 protochain 6
#注释:数字6表示的是tcp在ip报文中的编号

注意:
1)跟在proto和protochain后面的如果是tcp、udp、icmp,那么过滤器需要用反引号``包含,这是因为tcp、udp、icmp是tcpdump的关键字。

5. type类过滤器详解

5.1 基于ip地址进行过滤:host

使用host就可以指定host ip 进行过滤

[root@bogon home]# tcpdump host 10.130.0.171

数据包的ip可以再细分为源ip和目标ip两种

#根据源ip进行过滤
[root@bogon home]# tcpdump -i enp2s0 src host 10.130.0.171
#根据目标ip进行过滤
[root@bogon home]# tcpdump -i enp2s0 dst host 10.130.0.171

5.2 基于网段进行过滤:net

若你的ip范围是一个网段,可以这样直接指定:

[root@bogon home]# tcpdump net 192.168.10.0/24

网段同样可以再细分为源网段和目标网段

# 根据源网段进行过滤
[root@bogon home]# tcpdump src net 192.168.10.0/24
#根据目标网段进行过滤
[root@bogon home]# tcpdump dst net 192.168.10.0/24

5.3 基于端口进行过滤:port

使用port就可以指定端口进行过滤

[root@bogon home]# tcpdump port 8088

端口同样也再细分为源端口和目标端口

#根据源端口进行过滤
[root@bogon home]# tcpdump src port 8088
#根据目标端口进行过滤
[root@bogon home]# tcpdump dst port 8088

指定两个端口

# 1、同时指定两个端口
[root@bogon home]# tcpdump port 80 or port 8088
[root@bogon home]# tcpdump port 80 or 8088

5.4 基于多个端口范围进行过滤:portrange

如果想抓取的不再是一两个端口,而是一个范围,一个个指定就很麻烦,此时可以指定一个端口段

[root@bogon home]# tcpdump portrange 8000-8080

端口段也同样分为源端口段和目标端口段

#根据源端口段进行过滤
[root@bogon home]# tcpdump src portrange 8000-8080
#根据目标端口段进行过滤
[root@bogon home]# tcpdump dst portrange 8000-8080

对于一些常见协议的默认端口,我们还可以直接使用协议名,而不用具体的端口号
比如http=80,https=443等

[root@bogon home]# tcpdump tcp port http

6. 过滤规则组合

6.1 逻辑运算符

  • and:所有的条件都满足,也可以表示为&&
  • or:只要有一个条件满足就可以,也可以表示为||
  • not:取反,也可以使用!

例题:想抓取一个来自10.5.2.3,发往任意主机的3389端口的包

[root@bogon home]# tcpdump src 10.5.2.3 and dst port 3389

6.2 括号的使用

当你在使用多个过滤器进行组合时,有可能需要用到括号,而括号在 shell 中是特殊符号,因为你需要使用引号将其包含

[root@bogon home]# tcpdump 'src 10.0.2.4 and (dst port 3389 or 22)'

6.3 条件符

  • =:判断二者相等
  • ==:判断二者相等
  • !=:判断二者不相等

6.4 关键字

  • if:表示网卡接口名
  • proc:表示进程名
  • pid:表示进程 id
  • svc:表示 service class
  • dir:表示方向,in 和out
  • eproc:表示 effective process name
  • epid:表示 effective process ID

例题:过滤来自进程名为 nc 发出的流经 en0 网卡的数据包,或者不流经 en0 的入方向数据包

[root@bogon home]# tcpdump `( if=en0 and proc =nc ) || (if != en0 and dir=in)`

7. 常用使用场景

7.1 抓取报文后隔指定的时间保存一次

[root@bogon home]#  tcpdump -s 0 -G 60 -Z root -w %Y_%m%d_%H%M_%S.cap

-s :当后面接的参数为0时,表示截取报文全部内容
-G:后面接时间,单位为秒,本例为60s
-Z:表示后面的新文件也是用root权限来执行的,如果用-C时,必须配合-Z使用
-w:表示写入
%Y_%m%d_%H%M_%S.cap:抓包后的文件名称以时间戳命名

7.2 获取从10.130.0.64发来的包

[root@bogon home]# tcpdump src host 10.130.0.64 -c 10 -i enp2s0

src host:根据源IP进行过滤
-c:监听的数据包数,本例中为10,监听10个包后自动停止
-i:后接网卡名称

参考链接:
https://www.cnblogs.com/hunttown/p/13631592.html
https://blog.csdn.net/weixin_43214644/article/details/126436631

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值