几款抓包工具tcpdump、wireshark、tshark的简单介绍
http://tshare365.com/archives/1295.html
前言
在Linux下,当我们需要抓取网络数据包分析时,通常是使用工具tcpdump。但是,有时我们需要将抓取的数据包保存在一个文件中,已备以后分析。而tcpdump保存的文件是二进制的文件,使用cat 和vim 都无法打开查看。此时我们采取的措施是,下载到本地使用wireshark界面网络分析工具进行网络包分析。
最近才发现,原来wireshark也提供有Linux命令行工具tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们就来简单点的介绍的下这几款工具的使用的方法。
一、Tcpdump工具的使用
1、常用参数
1.1、常用选项
-
[ -i interface ] 指定接口
-
[ -W filecount ] 保存在指定的文件
-
-r 通过读取文件的方式,来实现抓包,而不是使用
-
-n 表示以数字形式显示,如果是多个N,第一个表示把主机名显示成数字,第二个N表示把协议的端口显示成数字。
-
-XX支持链路层。
1.2、类型相关的关键字
host ,net ,port
1.3、流向相关的关键字
Src ,dst ,src or dst ,src and dst
1.4、Proto 协议
ether,ip ,arp,tcp,udp,
1.5、组合逻辑表达式
And OR NOT
2、使用举例
2.1、显示进来的IP,在22端口的。
1
|
[root@director1 keepalived]
# tcpdump -i eth0 dst 172.16.11.1 and port 80
|
2.2、显示目标是172.16.11.1 端口是80的
1
|
[root@director1 keepalived]
# tcpdump -nn -vv -i eth0 tcp src or dst 172.16.11.1 and port 80
|
2.3、把抓取的22端口的信息放在文件/packets中
1
|
[root@director1 ~]
# tcpdump -nn -i eth0 -w /packets tcp and dst 172.16.11.1 and port 22
|
2.4、源和目标地址的
1
|
[root@director1 keepalived]
# tcpdump -nn -vv -i eth0 src and dst 172.16.11.1 and port 80
|
最常用法
1
|
[root@node1 ~ ]
# tcpdump -nn -i eth0 tcp and host 192.168.1.163 and port 80
|
####注意:这个-nn的含义:第一个n表示以IP地址的方式显示主机名,第二个N是以端口数字的形式代替服务名。
1
2
3
4
5
6
|
[root@node1 ~ ]
# tcpdump -nn -vs0 -i eth0 -c 100 -w 1.cap
##对于包-c指定抓多少包,-w 指明自己要存放的位置, -vs0 表示不限制包的大小,所有的包都抓出来。
tcpdump: listening on eth0, link-
type
EN10MB (Ethernet), capture size 65535 bytes
100 packets captured
100 packets received by filter
###显示一百个包,已经抓好了。
0 packets dropped by kernel
|
###但是,需要注意的是,这里面保存在1.cap的包是以二进制格式保存的,如果是vim,cat都无查看,可以借助于工具,wireshare。
二、安装wireshark
Wireshark-gnome 是一个图形化的工具
1
|
yum
install
wireshark wireless-tools-devel wireshark-gnome -y
|
1.1、打开wireshark的方式
1.2、然后开启一个图形化界面
1.3、点击左上角的file–>open打开我们的抓包存储的文件就可以了
1.4、Location:输入我们要查找文件的位置
1.5、下面分享一个我之前对MySQL命令的抓包案例
三、命令行工具tshark
1.1、实时打印当前http请求的url(包括域名)
1
2
3
4
5
6
|
tshark -s 512 -i eth0 -n -f
'tcp dst port 80'
-R 'http.host and http.
request
.uri' -T fields -e http.host -e http.request.uri -l
|
tr
-d '
\
t'
|
参数解释:
-
-i eth0 :捕获eth0网卡 -s 512 :只抓取前512个字节数据
-
-n :禁止网络对象名称解析
-
-f 'tcp dst port 80' :只捕捉协议为tcp,目的端口为80的数据包
-
-R 'http.host and http.request.uri' :过滤出http.host和http.request.uri
-
-T fields -e http.host -e http.request.uri :打印http.host和http.request.uri
-
-l :输出到标准输出
1.2、实时打印当前mysql查询语句
1
|
tshark -s 512 -i eth0 -n -f
'tcp dst port 3306'
-R
'mysql.query'
-T fields -e mysql.query
|
下面介绍参数含义:
-
-s 512 :只抓取前512个字节数据
-
-i eth0 :捕获eth0网卡
-
-n :禁止网络对象名称解析
-
-f 'tcp dst port 3306' :只捕捉协议为tcp,目的端口为3306的数据包
-
-R 'mysql.query' :过滤出mysql.query
-
-T fields -e mysql.query :打印mysql查询语句
-
tshark使用-f来指定捕捉包过滤规则,规则与tcpdump一样,可以通过命令man pcap-filter来查得。
-
tshark使用-R来过滤已捕捉到的包,与界面板wireshark的左上角Filter一致。
除此之外,他可以通过抓包查看到那些用户通过那些命令,以及是使用的什么方法。请求的我们的主机。
1.3、详细查看用户对我们的主机进行那些请求方法
1
|
[root@node1 ~ ]
# tshark -n -t a -R http.request -T fields -e "frame.time" -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.requset.uri"
|
###命令的执行的结果
总结
关于抓包的几款工具到此解释完毕,如果有什么疑问请留言!