Linux tcpdump

tcpdump - 转储网络上的数据流

是不是感觉很懵?全方位描述tcpdump:

  • 通俗:tcpdump是一个抓包工具,用于抓取网络中传输的数据包
  • 形象:tcpdump如同国家海关,凡是入境和出境的货物,海关都要抽样检查,看看里面具体是什么货物
  • 学术:tcpdump是一种Sniffer(嗅探器),利用以太网的特性,通过将网络设备置于混杂模式来获取传输在网络中的信息包

命令作用

该命令支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤其其提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。经典的系统管理员分析工具!
在这里插入图片描述

语法

tcpdump [-adeflnNOpqStvx][-c<数据包数目>][-dd][-ddd][-F<表达文件>][-i<网络界面>][-r<数据包文件>]
  [-s<数据包大小>][-tt][-T<数据包类型>][-vv][-w<数据包文件>][输出数据栏位]

参数说明:

  • -a 尝试将网络和广播地址转换成名称。
  • -c<数据包数目> 收到指定的数据包数目后,就停止进行倾倒操作。
  • -d 把编译过的数据包编码转换成可阅读的格式,并倾倒到标准输出。
  • -dd 把编译过的数据包编码转换成C语言的格式,并倾倒到标准输出。
  • -ddd 把编译过的数据包编码转换成十进制数字的格式,并倾倒到标准输出。
  • -e 在每列倾倒资料上显示连接层级的文件头。
  • -f 用数字显示网际网络地址。
  • -F<表达文件> 指定内含表达方式的文件。
  • -i<网络界面> 使用指定的网络截面送出数据包。
  • -l 使用标准输出列的缓冲区。
  • -n 不把主机的网络地址转换成名字。
  • -N 不列出域名。
  • -O 不将数据包编码最佳化。
  • -p 不让网络界面进入混杂模式。
  • -q 快速输出,仅列出少数的传输协议信息。
  • -r<数据包文件> 从指定的文件读取数据包数据。
  • -s<数据包大小> 设置每个数据包的大小。
  • -S 用绝对而非相对数值列出TCP关联数。
  • -t 在每列倾倒资料上不显示时间戳记。
  • -tt 在每列倾倒资料上显示未经格式化的时间戳记。
  • -T<数据包类型> 强制将表达方式所指定的数据包转译成设置的数据包类型。
  • -v 详细显示指令执行过程。
  • -vv 更详细显示指令执行过程。
  • -x 用十六进制字码列出数据包资料。
  • -w<数据包文件> 把数据包数据写入指定的文件。

常用关键字

tcpdump命令中几种关键字:

  1. 类型关键字,包括:host,net,port
  2. 传输方向关键字,包括:src,dst
  3. 协议关键字,包括: ip,arp,tcp,udp等类型
  4. 其他关键字,包括:gateway,broadcast,less,greater,not,!,and,&&,or,||

常用命令

#抓取回环网口的包
$ tcpdump -i lo
#防止包截断的方法
$ tcpdump -s 0
#以数字显示主机及端口
$ tcpdump -n

#显示TCP包信息
$ tcpdump
#显示指定数量包
$ tcpdump -c 20
#精简显示
$ tcpdump -c 10 -q

#抓取主机 192.168.200.100的所有数据包
tcpdump host 192.168.200.100
#抓取经过指定网口 interface 的数据包
tcpdump -i eth0 host 192.168.200.100
#筛选 SRC_IP,抓取经过 interface 且从 192.168.200.100发出的包
tcpdump -i eth0 src host 192.168.200.100
#筛选 DST_IP,抓取经过 interface 且发送到 192.168.200.100 的包
tcpdump -i eth0 dst host 192.168.200.100
#抓取主机 192.168.200.101 和主机 192.168.200.102 或 192.168.200.103 通信的包
tcpdump host 192.168.200.101 and \(192.168.200.102 or 192.168.200.103\)

#抓取某端口的数据包

#抓取所有端口,显示 IP 地址
tcpdump -nS
#抓取某端口上的包
tcpdump  port 22
#抓取经过指定 interface,端口 22 的数据包
tcpdump -i eth0 port 22
#查看发送到 host 192.168.200.100 的网口 eth0 的 22 号端口的包
tcpdump  -i eth0 -nnt  dst host 192.168.200.100  and port 22 -c 1 -vv

#抓取某网络(网段)的数据包

#抓取经过指定 interface,并且 DST_NET 或 SRC_NET 是 192.168.200的包
tcpdump  -i eth0 -net  192.168.200
#抓取某协议的数据包
tcpdump  -i eth0 icmp
tcpdump  -i eth0 ip
tcpdump  -i eth0 tcp
tcpdump  -i eth0 udp
tcpdump  -i eth0 arp

#复杂的逻辑表达式抓取过滤条件

#抓取经过 interface eth0 发送到 host 200.200.200.1 或 200.200.200.2 的 TCP 协议 22 号端口的数据包
tcpdump -i eth0 -nntvv -c 10 '((tcp) and (port 22) and ((dst host 200.200.200.1) or (dst host 200.200.200.2)))'
#抓取经过 interface eth0, DST_MAC 或 SRC_MAC 地址是 00:16:3e:12:16:e7 的 ICMP 数据包
tcpdump -i eth0 '((icmp) and ((ether host 00:16:3e:12:16:e7)))' -nnvv`
#抓取经过 interface eth0,目标网络是 192.168 但目标主机又不是 192.168.200.100 的 TCP 且非 22 号端口号的数据包
tcpdump -i eth0 -nntvv  '((dst net 192.168) and (not dst host 192.168.200.100) and (tcp) and (not port 22))'
#抓取流入 interface eth0,host 为 192.168.200.100且协议为 ICMP 的数据包
tcpdump -i eth0 -nntvv -P in host 192.168.200.100 and icmp
#抓取流出 interface eth0,host 为 192.168.200.100且协议为 ICMP 的数据包
tcpdump -i eth0 -nntvv -P out host 192.168.200.100 and icmp

问题

  1. 默认网卡的问题
# tcpdump
tcpdump: packet printing is not supported for link type NFLOG: use -w

使用-i指定相关参数即可,如tcpdump -i ens33
2.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值