抓包工具tcpdump及分析工具wireshark

一、抓包工具tcpdump

tcpdump是一个用于截取网络分组,并输出分组内容的工具,简单说就是数据包抓包工具。tcpdump凭借强大的功能和灵活的截取策略,使其成为Linux系统下用于网络分析和问题排查的首选工具。

tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的Linux系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。

tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。

1.tcpdump的表达式介绍

表达式是一个正则表达式,tcpdump利用它作为过滤报文的条件,如果一个报文满足表 达式的条件,则这个报文将会被捕获。如果没有给出任何条件,则网络上所有的信息包 将会被截获。

在表达式中一般如下几种类型的关键字:

第一种是关于类型的关键字,主要包括host,net,port,例如 host 210.27.48.2, 指明 210.27.48.2是一台主机,net 202.0.0.0指明202.0.0.0是一个网络地址,port 23 指明端口号是23。如果没有指定类型,缺省的类型是host。

第二种是确定传输方向的关键字,主要包括src,dst,dst or src,dst and src, 这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是 210.27.48.2 , dst net 202.0.0.0 指明目的网络地址是202.0.0.0。如果没有指明 方向关键字,则缺省是src or dst关键字。

第三种是协议的关键字,主要包括fddi,ip,arp,rarp,tcp,udp等类型。Fddi指明是在FDDI (分布式光纤数据接口网络)上的特定的网络协议,实际上它是”ether”的别名,fddi和ether 具有类似的源地址和目的地址,所以可以将fddi协议包当作ether的包进行处理和分析。 其他的几个关键字就是指明了监听的包的协议内容。如果没有指定任何协议,则tcpdump 将会 监听所有协议的信息包。

除了这三种类型的关键字之外,其他重要的关键字如下:gateway, broadcast,less, greater, 还有三种逻辑运算,取非运算是 ‘not ‘ ‘! ‘, 与运算是’and’,’&&’;或运算是’or’ ,’||’; 这些关键字可以组合起来构成强大的组合条件来满足人们的需要。

实际操作:

普通情况下,直接启动tcpdump将监视第一个网络接口上所有流过的数据包。

2.监视指定的网络接口数据包:

tcpdump -i eth1

若不指定网络接口则默认会监视第一个网络接口,一般为eth0。

3.也可抓取指定数量的数据包:

抓取eth0网卡5个数据包如下

[[email protected] ~]# tcpdump -c 5 -i eth0

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:07:13.076347 IP bogon.ssh > bogon.51363: Flags [P.], seq 4241485249:4241485365, ack 2060186985, win 321, length 116
20:07:13.078052 IP bogon.ssh > bogon.51363: Flags [P.], seq 116:232, ack 1, win 321, length 116
20:07:13.078319 IP bogon.51363 > bogon.ssh: Flags [.], ack 232, win 254, length 0
20:07:13.086005 ARP, Request who-has bogon tell bogon, length 28
20:07:13.087084 ARP, Reply bogon is-at d0:c7:c0:9f:92:3e (oui Unknown), length 46
5 packets captured

在默认情况下tcpdump会一直抓包,直到按‘Ctrl+C’停止,我们可以使用-c选项抓取指定数量的数据包。

4.上例中tcpdump会对域名和端口进行解析,若不想让其解析则使用如下命令:

[[email protected] ~]# tcpdump -nn -c 5 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:21:55.904586 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241488513:4241488709, ack 2060189605, win 321, length 196
20:21:55.906627 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:376, ack 1, win 321, length 180
20:21:55.906929 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 376, win 252, length 0
20:21:55.908798 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 376:636, ack 1, win 321, length 260
20:21:55.911483 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 636:800, ack 1, win 321, length 164
5 packets captured

5.同时也可以在抓包时包含抓包日期:

[[email protected] ~]# tcpdump -nn -tttt -c 5 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
2015-04-20 20:24:05.624340 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241490697:4241490893, ack 2060190717, win 321, length 196
2015-04-20 20:24:05.626165 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:392, ack 1, win 321, length 196
2015-04-20 20:24:05.626497 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 392, win 250, length 0
2015-04-20 20:24:05.627070 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 392:668, ack 1, win 321, length 276
2015-04-20 20:24:05.628562 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 668:832, ack 1, win 321, length 164
5 packets captured

在使用-tttt时应注意:

-t 不在每一行中输出时间戳。

-tt 在每一行中输出非格式化的时间戳。

-ttt 输出本行和前面一行之间的时间差。

-tttt 在每一行中输出由date处理的默认格式的时间戳。

6.指定抓包的协议类型:

tcpdump支持指定以下协议:ip,ip6,arp,tcp,udp,wlan等。

[[email protected] ~]# tcpdump -nn tcp -c 5 -i eth0
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:28:51.804033 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241496969:4241497165, ack 2060193653, win 321, length 196
20:28:51.805002 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:376, ack 1, win 321, length 180
20:28:51.805729 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 376, win 251, length 0
20:28:51.812823 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 376:636, ack 1, win 321, length 260
20:28:51.814461 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 636:800, ack 1, win 321, length 164
5 packets captured

7.指定抓包的端口:

[[email protected] ~]# tcpdump -nn tcp -c 5 -i eth0 port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
20:30:31.359034 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 4241502953:4241503149, ack 2060196549, win 321, length 196
20:30:31.359953 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 196:376, ack 1, win 321, length 180
20:30:31.360207 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 376, win 252, length 0
20:30:31.361648 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 376:636, ack 1, win 321, length 260
20:30:31.363741 IP 192.168.1.132.22 > 192.168.1.100.51363: Flags [P.], seq 636:800, ack 1, win 321, length 164
5 packets captured

8.指定目标IP的数据包:

[[email protected] ~]# tcpdump -nn  -c 5 -i eth0 dst 192.168.1.132 and port 22
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
21:11:34.383940 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 4241521353, win 255, length 0
21:11:34.593992 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 149, win 254, length 0
21:11:34.796001 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 297, win 254, length 0
21:11:35.000980 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 445, win 253, length 0
21:11:35.203034 IP 192.168.1.100.51363 > 192.168.1.132.22: Flags [.], ack 593, win 253, length 0
5 packets captured

9.可以将抓到的包写入文件中以及读取包文件:

[[email protected] ~]# tcpdump -nn  -c 5 -i eth0 tcp  and port 22 -w /tmp/0420.pcap
tcpdump: listening on eth0, link-type EN10MB (Ethernet), capture size 65535 bytes
5 packets captured
5 packets received by filter
0 packets dropped by kernel
[[email protected] ~]# tcpdump -r /tmp/0420.pcap
reading from file /tmp/0420.pcap, link-type EN10MB (Ethernet)
21:14:25.727939 IP bogon.ssh > bogon.51363: Flags [P.], seq 4241525737:4241525789, ack 2060214305, win 321, length 52
21:14:25.729555 IP bogon.ssh > bogon.51363: Flags [P.], seq 52:168, ack 1, win 321, length 116
21:14:25.729826 IP bogon.51363 > bogon.ssh: Flags [.], ack 168, win 255, length 0
21:14:34.206036 IP bogon.51363 > bogon.ssh: Flags [P.], seq 1:37, ack 168, win 255, length 36
21:14:34.246534 IP bogon.ssh > bogon.51363: Flags [.], ack 37, win 321, length 0

保存为.pcap后缀的文件,方便我们使用wireshark等工具读取分析。

10.综合举例:

tcpdump tcp -i eth1 -t -s 0 -c 100 and dst port ! 22 and src net 192.168.1.0/24 -w ./target.cap

(1)tcp: ip icmp arp rarp 和 tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型
(2)-i eth1 : 只抓经过接口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文件,方便用ethereal(即wireshark)分析

二、wireshark的简介及使用:

在Linux下,当我们需要抓取网络数据包分析时,通常是使用tcpdump抓取网络raw数据包存到一个文件,然后下载到本地使用wireshark界面网络分析工具进行网络包分析。

wireshark也提供有Linux命令行工具-tshark。tshark不仅有抓包的功能,还带了解析各种协议的能力。下面我们以两个实例来介绍tshark工具。

安装:yum install -y wireshark

常用命令:

  1. 显示访问http请求的域名以及uri

    tshark -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

注意:有时若无输出可能是需要指定网卡,具体使用如下:

tshark -i eth0 -n -t a -R http.request -T fields -e "frame.time" -e "ip.src" -e "http.host" -e "http.request.method" -e "http.request.uri"

2.以抓取mysql的查询
        tshark -n -i eth1 -R ‘mysql.query‘ -T fields -e "ip.src" -e "mysql.query"

3.抓取指定类型的MySQL查询

tshark -n -i eth1 -R ‘mysql matches "SELECT|INSERT|DELETE|UPDATE"‘ -T fields -e "ip.src" -e "mysql.query"

4.统计http的状态

tshark -n -q -z http,stat, -z http,tree

这个命令,直到你ctrl + c 才会显示出结果

5.实时打印当前http请求的url(包括域名)

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‘

下面介绍参数含义:

-s 512 :只抓取前512个字节数据

-i eth0 :捕获eth0网卡

-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 :输出到标准输出

6.实时打印当前mysql查询语句

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查询语句

以上只是简单的使用抓包工具的命令,若想深挖还需在今后的工作中继续学习!

时间: 2024-10-10 06:58:46

抓包工具tcpdump及分析工具wireshark的相关文章

基于Linux C的socket抓包程序和Package分析 (一)

 测试运行平台:CentOS 6.5发行版,内核版本3.11 1. Linux抓包源程序 在OSI七层模型中,网卡工作在物理层和数据链路层的MAC子层. 进行网络通信时,源主机通过socket(或其它)应用程序产生IP报文,经过各个OSI层层封装,数据包以Ethernet帧的形式进入物理层.Ethernet帧包含源主机地址.IP报文.目标地址(IP地址.端口号或映射的6字节MAC地址)和需要传送到目标主机的其它信息. 目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链

HTTP抓包的实践--工具

在测试中,在使用jmeter进行功能测试和压力测试前,我们总是需要了解我们测试的功能页面的通讯方式进行了解.对于开发没有给予通讯文档的功能进行测试,抓包不失为一个好方法. 为了兼容多个平台,比如windows.mac.linux,使用chrome自带的调试工具是个好方法. 我们可以通过菜单打开开发人员工具: 打开以后看到,开发人员工具的调试窗口: 我们看这个工具的主要选项卡: 1.Elements:查看页面的DOM节点信息. 2.Console:输入输出控制台(可以执行调试脚本). 3.Sour

【转】Fiddler抓包指南:结合Proxifier工具

本文转自:https://blog.csdn.net/china_jeffery/article/details/93000824 本文介绍如何使用Fiddler抓取HTTP和HTTPS协议的包,同时还介绍了如何结合Proxifier工具来处理Filddler无法抓取到包的情况. 一.HTTP基本抓包 Fiddler官网下载安装:https://www.telerik.com/fiddler 对浏览器的抓包,就不再赘述,打开这个软件就一目了然了,本文主要讲对普通Windows桌面应用程序的抓包,

Android系统手机端抓包方法(tcpdump)

抓包准备 1. Android手机需要先获得root权限.一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得).在终端模拟器界面输入su并回车,若报错则说明未root,若命令提示符从$变#则为rooted: 2. 如果Android手机尚未root,可通过superoneclick或其它方法进行root处理(需要先安装Microsoft .NET Framework).Superoneclick刷root权限教程:(http://soft.shouji.com.c

抓包神器 tcpdump 使用介绍

tcpdump 命令使用简介 简单介绍 tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上.熟悉 tcpdump 的使用能够帮助你分析.调试网络数据. 要想使用很好地掌握 tcpdump, 必须对网络报文(TCP/IP 协议)有一定的了解.不过对于简单的使用来说,只要有网络基础概念就行了. tcpdump 是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键. 选项 tcpdump 的选项也很多,要想知道所有选项的话,请参考 ma

抓包神器 tcpdump 使用介绍 (转)

tcpdump 命令使用简介 简单介绍 tcpdump 是一款强大的网络抓包工具,运行在 linux 平台上.熟悉 tcpdump 的使用能够帮助你分析.调试网络数据. 要想使用很好地掌握 tcpdump, 必须对网络报文(TCP/IP 协议)有一定的了解.不过对于简单的使用来说,只要有网络基础概念就行了. tcpdump 是一个很复杂的命令,想了解它的方方面面非常不易,也不值得推荐,能够使用它解决日常工作中的问题才是关键. 选项 tcpdump 的选项也很多,要想知道所有选项的话,请参考 ma

抓包 : tcpdump

tcpdump -i eth0 -Ans0 -i  指定端口 -A  ASCII码 -n s  抓包大小   0  抓取所有

手机抓包的两种方法:wireshark抓包和fiddler抓包

1.电脑做wifi热点,手机连上后电脑上使用wireshark抓包 该方法手机无须root,并且适用于各种有wifi功能的手机(IOS.android等).平板等.只要电脑的无线网卡具有无线承载功能,就可以.方法如下: 1.把电脑的网络做为热点 2.开启wifi热点后,被测手机连接到该热点: 3.启动wireshark,选择做为热点的网卡,点击start开始抓包: 4.操作手机,可以抓取到手机所有与网络交互的数据包,如需停止,直接点击wireshark的stop即可. 2.使用fiddler来抓

tcpdump 抓包存文件使用tftp传输 wireshark 打开报错

pcap: File has 186435570-byte packet, bigger than maximum of 65535 解决方法:将传输模式设置为binary 在使用tftp传输时 tftp> connect 192.168.1.1 tftp> ?Commands may be abbreviated.  Commands are: connect         connect to remote tftpmode            set file transfer mo