在linux中使用tcpdump命令 – 监听网络流量

tcpdump命令 – 监听网络流量

tcpdump命令是一款sniffer工具,是linux上的抓包工具,嗅探器;它可以打印出所有经过网络接口的数据包的头信息。

tcpdump命令工作时先要把网卡的工作模式切换到混杂模式。所以tcpdump命令需要以root身份运行。tcpdump命令是linux下使用最广泛的网络协议分析工具。使用tcpdump命令时,必须精通TCP/IP协议工作原理。

语法格式: tcpdump [参数]

常用参数:

-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命令中几种关键字:
第一种:类型关键字,包括:host,net,port
第二种:传输方向关键字,包括:src,dst
第三种:协议关键字,包括: ip,arp,tcp,udp等类型
第四种:其他关键字,包括:gateway,broadcast,less,greater,not,!,and,&&,or,||

【备注说明】

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

参考实例
查看版本
tcpdump --version
在这里插入图片描述
显示TCP包信息

tcpdump

监视指定网络接口的数据包:
tcpdump -i eno16777736
在这里插入图片描述
抓取80端口的HTTP报文,以文本形式展示:

tcpdump -i any port 80 -A在这里插入图片描述在这里插入图片描述
抓取所有经过eno16777736的网络数据包,当前eno16777736的IP为192.168.23.134

在192.168.23.142主机执行
因为执行的为检测命令,如果当时没有输出,可以使用其他机器使用ssh或其他方式触发命令后续的输出内容
tcpdump -i eno16777736 host 192.168.23.134
在这里插入图片描述
截取两台主机之间的数据
tcpdump -n -i eno16777736 host 192.168.23.136 and 192.168.23.142
在这里插入图片描述
截取进入 两台主机 的数据
tcpdump -n -i eno16777736 dst 192.168.23.136 or 192.168.23.142
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
【命令浅解】

tcpdump tcp -i eno16777736 -t -s0 -c 100 and dst port ! 22 and src net 192.168.23.0/24 -w ./target.cap

1)tcp: # ip,icmp,arp,rarp,udp这些选项要放第一个参数,用来过滤数据报的类型
2)-i eno16777736 # 只抓经过网口eth1的包
3)-t # 不显示时间戳
4)-s 0 # 抓取数据包时默认抓取长度为68字节。加上-s 0 后可以抓到完整的数据包
5)-c 100 # 只抓取100个数据包
6)dst port ! 22 # 不抓取目标端口是22的数据包
7)src net 192.168.1.0/24 # 数据包的源网络地址为192.168.1.0/24
8)-w ./target.cap # 保存成cap文件,方便用wireshark工具进行分析
在这里插入图片描述 通过IP找流量
tcpdump host 192.168.23.142 -i eno16777736
在这里插入图片描述

通过源地址和/或目的地址进行过滤
如果你只想一个方向上的流量,可以使用 src 或 dst 指定。

tcpdump src 192.168.23.142 -i eno16777736
tcpdump dst 192.168.23.142 -i eno16777736

在这里插入图片描述
在这里插入图片描述
通过网段过滤流量
使用 net 选项查看进出一个网段或子网的进出流量。

tcpdump net 192.168.23.0/24

使用十六进制输出流量包的内容
当要对一些包进行仔细审查其内容的时候,使用十六进制输出的方式来查看包就很有用了。
-c 1 是指定只抓取一个包。

tcpdump -c 1 -X icmp -i eno16777736
tcpdump -c 1 -X tcp port 80 -i eno16777736
在这里插入图片描述在这里插入图片描述
查看指定端口上的流量
通过 port 选项,可以找到指定端口上的进出流量。

tcpdump port 80 -i eno16777736

tcpdump src port 80 -i eno16777736
在这里插入图片描述在这里插入图片描述

只查看 IPv6 流量

tcpdump src fe80::20c:29ff:fe7b:cf78 -i eno16777736
tcpdump -nn dst fe80::20c:29ff:fe7b:cf78 -i eno16777736 -c 2

使用 ipv6 地址ping使用的是 ping6 命令
命令格式为
ping6 ipv6地址%网卡名 #要通过 “%” 指定网卡名
ping -6 ipv6地址%网卡名 #要通过 “%” 指定网卡名, ping -6 在ubuntu上无效,需要使用ping6

通过端口范围过滤
tcpdump portrange 21-233

查看指定大小的数据包
可以查看指定大小的数据包,指定数据包的大小的时候还可以使用比较运算符。

tcpdump less 32
tcpdump greater 64
tcpdump <= 128

从文件中读取抓包信息
使用 -r 选项从文件中读取,在读取文件的时候,我们可以像正常抓包时一样使用tcpdump.需要注意的是,文件中不存在的数据是抓取不到和解析的。

tcpdump -r capture_file
示例

tcpdump -r capture_file dst 192.168.23.134
tcpdump -r capture_file src 192.168.23.134

tcpdump -r capture_file -i ens33 icmp6
在这里插入图片描述

下面是 tcpdump 的一些其他进阶选项,抓包时候进行进一步调整。

-A : Print each packet (minus its link level header) in ASCII. Handy for capturing web pages.
-X : 十六进制的ASCII编码方式输出显示包内容
-XX : 同 -X , 但是同时显示一台帧头部信息。
-D : 显示可用的接口列表。
-l : 显示行号输出。
-q : 静默输出(显示最少的信息)。
-t : 输出的时间戳为人类可读格式(经实验无时间戳输出)。
-tttt : 输出最详细的时间戳为人类可读格式。
-i eth0 : 监听 eth0 网卡抓包。
-vv : 比 -v 有更详细的输出。
-c : 指定的抓包的数量,之后停止。
-s : 指定每个抓取的数据包的字节长度,默认是262144字节. 使用 -s0 获取整个数据包的内容。
-S : 输出绝对数据包的绝对序列号。
-e : 同时获取以太帧头信息。
-E : 通过给定的密钥解密 IPSEC 数据流。

裸视图输出
下面的组合输出的是:没有主机名和端口解析、使用绝对序号、人类可读时间戳的详细输出。
tcpdump -ttnnvvS -i eno16777736 -c 1
在这里插入图片描述
指定源IP和目的端口的流量
tcpdump -nnvvS src 192.168.23.142 -i eno16777736 and dst port 80
在这里插入图片描述

网段到网段的流量
下面阿组合输出为:从源为192.168.0.0/16目的为10.0.0.0/8或172.16.0.0/16、不解析主机名、十六进制格式、详细级别为-v级别的抓包信息。

tcpdump -nvX src net 192.168.23.0/16 and dst net 10.0.0.0/8 or 172.16.0.0/16

到指定地址的非ICMP的流量
tcpdump dst 192.168.23.142 -i eno16777736 and not icmp

在这里插入图片描述
关于分组的小结
我们可以看到,通过合理的组合,我们就可以得到任何想要的结果,关键是要搞清楚想要的信心,并且构建合适的查询语法。

在构建复杂查询时,可能必须使用单引号对选项进行分组,在下例中是在“()”括号下面。单引号用于告诉tcpdump忽略某些特殊字符。同样的技术也可以用于使用其他表达式(如host、port、net等)进行分组。

tcpdump ‘src 10.0.2.4 and (dst port 3389 or 22)’

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值