tcpdump与WireShark是Linux下的两个常用,功能强大的抓包工具,下面列出这两个工具的简单用法。

tcpdump用法

tcpdump用法:

sudo tcpdump -i ens33 src 192.168.0.19 port 80 -xx -Xs 0 -w test.cap

sudo tcpdump -i ens33 src port 80 -xx -Xs 0 -w test.cap

参数说明:

-i: 指定网卡

src: 指明包的来源

port: 指明端口号

-xx: 指抓到的包以16进制显示

-X: 指以ASCII码显示

-s 0: 指明抓整个包

-w: 写到文件中

WireShark过虑用法

【WireShark中的逻辑运算】

与: and 或 &&

或: or 或 ||

非: not 或!

WireShark中的判断语句

等于: eq 或 ==

大于: gt 或 >

小于: lt 或 <

大于等于: ge 或 >=

小于等于: le 或 <=

不等于: ne 或 !=

组合符(小括号)

()

包含与正由表达式匹配运算符

contains

matches

注意:matches 后的关键字是不区分大小写的,contains后面的关键字区分大小写。

【协议过滤】

在表达式输入框中输入协议名称即可。

注意:协议名称为小写,大写会报错

http

udp

tcp

arp

icmp

smtp

pop

dns

ip

ssl

ftp

telnet

ssh

rdp

rip

ospf

捕获多种协议,只需要对协议进行逻辑组合

http or udp

排除某种协议的数据包

not arp not tcp

【http域名与url过滤】

按内容长度过滤

http.content_length <= 100

http.content_length_header <= 100

针对数据包内容的过滤

匹配http请求中含有/api/member/health/check 的请求信息

http.request.uri matches "/api/member/health/check"

查询url中包含/api/member/home/test.html? 字符串的信息

http.request.uri contains "/api/member/home/test.html?"

按域名过滤

http.host == "jd.com" #精确过滤

http.host contains "jd.com" #模糊过虑

过滤请求的uri,取值是域名后的部分

http.request.uri=="/online/setpoint"

过滤完整的url

http.request.full_uri=="https://passport.jd.com/uc/login"

按http响应的状态过虑

http.response.code==302

http.response.code==401

过滤所有的http响应包

http.request==1

http.response==1

过滤所有请求方式为POST或GET的http请求包,注意POST或GET为大写

http.request.method==GET

http.request.method==POST

过滤含有指定cookie的http数据包

http.cookie contains userid

过滤http头中server字段含有nginx字符的数据包

http.server contains "nginx"

过滤content_type是text/html的http响应

http.content_type == "text/html"

过滤content_type是application/json的http响应

http.content_type == "application/json"

过滤content_encoding是gzip的http包

http.content_encoding == "gzip"

过滤所有含有http头中含有server字段的数据包

http.server

过滤HTTP/1.1版本的http包,包括请求和响应

http.request.version == "HTTP/1.1"

过滤http响应中的phrase

http.response.phrase == "OK"

【ip与端口过滤】

按目标地址过滤

ip.dst==192.168.0.19

按源地址过滤

ip.src==192.168.0.26

按目标地址或源地址过滤

ip.addr==192.168.0.19

按目标端口或源端口过滤

tcp.port==1935

udp.port==2365

按源端口过滤

tcp.srcport==2365

udp.srcport==2365

按目标端口过滤

tcp.dstport==1935

udp.dstport==1935

【数据过滤】

按包长度过滤

tcp.length < 300

udp.length < 300

过滤指定长度的udp数据包

udp.length == 20

过滤指定长度的tcp数据包

tcp.length == 20

过滤data部分长度为8的数据包

data.len==8

过滤指定内容的数据包

data.data == 00:08:30:03:00:00:00:00

【捕获经过指定ip的数据包】

抓取192.168.0.1 收到和发出的所有数据包

host 192.168.0.9

源地址192.168.0.1发出的所有数据包

src host 192.168.0.9

目标地址192.168.0.1收到的所有数据包

dst host 192.168.0.9

根据主机名过滤

src host hostnam

根据MAC地址过滤

ether host 80:05:09:03:E4:35

网络过滤,过滤整个网段

net 192.168.0

src net 192.168

dst net 192

【MAC地址过滤】

过滤目标或源地址是00:11:22:33:44:55的数据包

eth.addr== 00:11:22:33:44:55

过滤源地址是00:11:22:33:44:55的数据包

eth.src== 00:11:22:33:44:55

过滤目标地址是00:11:22:33:44:55的数据包

eth.dst== 00:11:22:33:44:55

【组合过滤】

捕获udp源端口等于3457,源ip等于3457,或者udp目标端口等于1091,目标ip等于192.168.0.10的数据包

(upd.srcport==3457 and ip.src=192.168.0.9) or (upd.dstport==1091 and ip.dst=192.168.0.10)

抓取所有目的网络是192.168,但目的主机不是192.168.0.2 的TCP数据

(tcp) and ((dst net 192.168) and (not dst host 192.168.0.2))

抓取所有目标MAC 地址是80:05:09:03:E4:35 的ICMP 数据

(icmp) and ((ether dst host 70:03:09:15:F4:12))
icmp && eth.dst==70:03:09:15:F4:12