全面介绍Linux下tcpdump的使用

简介: 全面介绍Linux下tcpdump的使用概述本文将介绍tcpdump的大部分选项及其表达式的具体用法tcpdump是Linux上的网络抓包工具,可以监视所有经过网卡的流量包。tcpdump的命令格式为tcpdump options expression,通过表达式可以过滤流量。

全面介绍Linux下tcpdump的使用

  1. 概述
    本文将介绍tcpdump的大部分选项及其表达式的具体用法

tcpdump是Linux上的网络抓包工具,可以监视所有经过网卡的流量包。

tcpdump的命令格式为tcpdump options expression,通过表达式可以过滤流量。直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

  1. 选项
    常用部分

-c -D -i -n -nn -v -w -X

解释
-A 以ASCII格式显示每个包的内容,可读性比较好
-c n 抓取n个包
-d 把编译过的数据包匹配代码转换成可阅读汇编的格式,并倾倒到标准输出。
-dd 把编译过的数据包匹配代码换成C语言的格式,并倾倒到标准输出。
-ddd 把编译过的数据包匹配代码转换成十进制数字的格式,并倾倒到标准输出。
-D 显示可用的接口列表
-e 获取以太网header
-E 使用提供的秘钥解密IPSEC流量
-i any 监听所有的网卡接口,用来查看是否有网络流量
-i eth0 只监听eth0网卡接口
-n 不要解析主机名
-nn 不要解析主机名或者端口名(以数字形式显示地址和端口)
-q 显示更少的输出(更加quiet)
-r 读取由-w选项输出的文件
-s 指定每一个包捕获的长度,单位是byte,使用-s0可以捕获整个包的内容
-S 输出绝对的序列号
-t 输出可读的时间戳
-tttt 输出最大程度可读的时间戳
-v, -vv, -vvv 显示更加多的包信息
-w 保存原始数据到文件(可以用wireshark打开)
-x 以16进制显示包的数据部分
-X 同时以16进制和ASCII格式显示包的数据部分

  1. 表达式
    3.1 逻辑

and(&&)

or(||)

not(!)

tcpdump port not 80 # 抓取非80端口

括号()需要斜杠转义,或者用单引号包住

tcpdump -i eth0 host 192.168.17.3 and !port 80

截获主机210.27.48.1 和 主机210.27.48.2 或 210.27.48.3的通信

tcpdump host 210.27.48.1 and (210.27.48.2 or 210.27.48.3 )

抓取所有经过eth1,目的网络是192.168,但目的主机不是192.168.1.200的TCP数据

tcpdump -i eth1 '((tcp) and ((dst net 192.168) and (not dst host 192.168.1.200)))'

3.2 协议
ip
ip6 ipv6协议
tcp
udp
icmp
igmp
arp
rarp

监听协议

tcpdump tcp
tcpdump icmp

有的传输层服务没有可以识别的关键字,可以使用关键字proto或ip proto加上/etc/protocols能够找到的协议名或相应的协议编号。例如,以下两种方式都会查找OSPF报文:
tcpdump ip proto ospf
tcpdump ip proto 89

3.3 方向
src :源地址
dst :目标地址
3.4 包大小
greater:tcpdump greater 20只抓取大于20字节的流量
less:tcpdump less 10 小于10字节
3.5 类型
host:IP地址或主机名
net :CIDR方法表示的网络地址 例tcpdump net 1.2.3.0/24或tcpdump net 192.168
gateway:指定网关
port:端口号
portrange:端口范围 例tcpdump portrange 1-1024
3.6 高级包头过滤
proto[x:y] : 过滤从x字节开始的y字节数。比如ip[2:2]过滤出3、4字节(第一字节从0开始排)
proto[x:y] & z = 0 : proto[x:y]和z的与操作为0
proto[x:y] & z !=0 : proto[x:y]和z的与操作不为0
proto[x:y] & z = z : proto[x:y]和z的与操作为z
proto[x:y] = z : proto[x:y]等于z

例:

抓取总长度大于150bytes的ip数据包(因为IP数据包头部第三个和第四个字节表示数据包的总长度)

tcpdump 'ip[2:2]>150'

抓取tcp的syn包

tcpdump 'tcp[tcpflags] = tcp-syn'

3.7 其它
broadcast 广播
multicast 多播

  1. 常见用法
    监听与百度的通信

tcpdump host www.baidu.com

监听指定主机和端口的数据包
获取主机196.168.1.8接收或发出的telnet包

tcpdump tcp port 23 and host 196.168.1.8

监听网段
tcpdump net 192.168

查看http协议的包内容
tcpdump -X port 80

过滤 GET 请求:
tcpdump port 80 and 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420'

过滤 POST 请求:

tcpdump port 80 and 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)'

作者:vant10
来源:CSDN
原文:https://blog.csdn.net/qq_21845263/article/details/95973084
版权声明:本文为博主原创文章,转载请附上博文链接!

相关文章
|
8月前
|
运维 网络协议 安全
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
【Shell 命令集合 网络通讯 】Linux 网络抓包工具 tcpdump命令 使用指南
239 0
|
8月前
|
网络协议 Linux
Linux命令(120)之tcpdump
Linux命令(120)之tcpdump
101 0
|
Linux
linux下用tcpdump抓包
linux下用tcpdump抓包
106 0
|
6月前
|
网络协议 Linux
linux tcpdump 使用小结(二)
linux tcpdump 使用小结(二)
44 1
|
5月前
|
存储 监控 网络协议
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
在Linux中,如何使用 tcpdump 监听主机为 192.168.1.1,tcp 端⼝为 80 的数据,并将将输出结果保存输出到tcpdump.log?
|
5月前
|
存储 运维 安全
在Linux中,如何使用tcpdump和tshark进行实时数据包捕获?
在Linux中,如何使用tcpdump和tshark进行实时数据包捕获?
|
6月前
|
运维 监控 网络协议
Linux抓包命令tcpdump使用技巧大全
【7月更文挑战第10天】
237 5
Linux抓包命令tcpdump使用技巧大全
|
6月前
|
Linux
linux tcpdump 使用小结(一)
linux tcpdump 使用小结(一)
59 10
|
5月前
|
监控 网络协议 Linux
在Linux中,如何使用 tcpdump 嗅探 80 端口的访问看看谁最⾼?
在Linux中,如何使用 tcpdump 嗅探 80 端口的访问看看谁最⾼?
|
5月前
|
机器学习/深度学习 网络协议 安全
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?
在Linux中,如何追踪TCP连接和网络数据包,如使用tcpdump或Wireshark?