当前位置:文档之家› Linux下抓包工具tcpdump应用全面详解

Linux下抓包工具tcpdump应用全面详解

Linux下抓包工具tcpdump应用全面详解
Linux下抓包工具tcpdump应用全面详解

Linux下抓包工具tcpdump应用详解

-

TCPDUMP简介

在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer 工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。

用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用sniffer工具简直可以对网络中的所有流量一览无余!Sniffer工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。

Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是必不可少的。所以,今天我们就来看看Linux中强大的网络数据采集分析工具——TcpDump。

用简单的话来定义tcpdump,就是:dump the traffice on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。

作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东东之一。

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

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

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

-----------------------

bash-2.02# tcpdump

tcpdump: listening on eth0

11:58:47.873028 https://www.doczj.com/doc/2115715345.html,bios-ns > https://www.doczj.com/doc/2115715345.html,bios-ns: udp 50

11:58:47.974331 0:10:7b:8:3a:56 > 1:80:c2:0:0:0 802.1d ui/C len=43

0000 0000 0080 0000 1007 cf08 0900 0000

0e80 0000 902b 4695 0980 8701 0014 0002

000f 0000 902b 4695 0008 00

11:58:48.373134 0:0:e8:5b:6d:85 > Broadcast sap e0 ui/C len=97

ffff 0060 0004 ffff ffff ffff ffff ffff

0452 ffff ffff 0000 e85b 6d85 4008 0002

0640 4d41 5354 4552 5f57 4542 0000 0000

0000 00

^C

------------------------

首先我们注意一下,从上面的输出结果上可以看出来,基本上tcpdump总的的输出格式为:系统时间来源主机.端口>目标主机.端口数据包参数

TcpDump的参数化支持

tcpdump支持相当多的不同参数,如使用-i参数指定tcpdump监听的网络界面,这在计算机具有多个网络界面时非常有用,使用-c参数指定要监听的数据包数量,使用-w参数指定将监听到的数据包写入文件中保存,等等。

然而更复杂的tcpdump参数是用于过滤目的,这是因为网络中流量很大,如果不加分辨将所有的数据包都截留下来,数据量太大,反而不容易发现需要的数据包。使用这些参数定义的过滤规则可以截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tcpdump使用参数指定要监视数据包的类型、地址、端口等,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用man tcpdump查看这些过滤规则的具体用法。

显然为了安全起见,不用作网络管理用途的计算机上不应该运行这一类的网络分析软件,为了屏蔽它们,可以屏蔽内核中的bpfilter伪设备。一般情况下网络硬件和TCP/IP堆栈不支持接收或发送与本计算机无关的数据包,为了接收这些数据包,就必须使用网卡的混杂模式,并绕过标准的TCP/IP 堆栈才行。在FreeBSD下,这就需要内核支持伪设备bpfilter。因此,在内核中取消bpfilter支持,就能屏蔽tcpdump之类的网络分析工具。

并且当网卡被设置为混杂模式时,系统会在控制台和日志文件中留下记录,提醒管理员留意这台系统是否被用作攻击同网络的其他计算机的跳板。

May 15 16:27:20 host1 /kernel: fxp0: promiscuous mode enabled

虽然网络分析工具能将网络中传送的数据记录下来,但是网络中的数据流量相当大,如何对这些数据进行分析、分类统计、发现并报告错误却是更关键的问题。网络中的数据包属于不同的协议,而不同协议数据包的格式也不同。因此对捕获的数据进行解码,将包中的信息尽可能的展示出来,对于协议分析工具来讲更为重要。昂贵的商业分析工具的优势就在于它们能支持很多种类的应用层协议,而不仅仅只支持tcp、udp等低层协议。

从上面tcpdump的输出可以看出,tcpdump对截获的数据并没有进行彻底解码,数据包内的大部分内容是使用十六进制的形式直接打印输出的。显然这不利于分析网络故障,通常的解决办法是先使用带-w参数的tcpdump 截获数据并保存到文件中,然后再使用其他程序进行解码分析。当然也应该定义过滤规则,以避免捕获的数据包填满整个硬盘。

TCP功能

数据过滤

不带任何参数的TcpDump将搜索系统中所有的网络接口,并显示它截获的所有数据,这些数据对我们不一定全都需要,而且数据太多不利于分析。所以,我们应当先想好需要哪些数据,TcpDump提供以下参数供我们选择数据:

-b 在数据-链路层上选择协议,包括ip、arp、rarp、ipx都是这一层的。

例如:tcpdump -b arp 将只显示网络中的arp即地址转换协议信息。

-i 选择过滤的网络接口,如果是作为路由器至少有两个网络接口,通过这个选项,就可以只过滤指定的接口上通过的数据。例如:

tcpdump -i eth0 只显示通过eth0接口上的所有报头。

src、dst、port、host、net、ether、gateway这几个选项又分别包含src、dst 、port、host、net、ehost等附加选项。他们用来分辨数据包的来源和去向,src host 192.168.0.1指定源主机IP地址是192.168.0.1,dst net 192.168.0.0/24指定目标是网络192.168.0.0。以此类推,host 是与其指定主机相关无论它是源还是目的,net是与其指定网络相关的,ether后面跟的不是IP地址而是物理地址,而gateway则用于网关主机。可能有点复杂,看下面例子就知道了:

tcpdump src host 192.168.0.1 and dst net 192.168.0.0/24

过滤的是源主机为192.168.0.1与目的网络为192.168.0.0的报头。

tcpdump ether src 00:50:04:BA:9B and dst……

过滤源主机物理地址为XXX的报头(为什么ether src后面没有host或者net?物理地址当然不可能有网络喽)。

Tcpdump src host 192.168.0.1 and dst port not telnet

过滤源主机192.168.0.1和目的端口不是telnet的报头。

ip icmp arp rarp 和tcp、udp、icmp这些选项等都要放到第一个参数的位置,用来过滤数据报的类型。

例如:

tcpdump ip src……

只过滤数据-链路层上的IP报头。

tcpdump udp and src host 192.168.0.1

只过滤源主机192.168.0.1的所有udp报头。

数据显示/输入输出

TcpDump提供了足够的参数来让我们选择如何处理得到的数据,如下所示:

-l 可以将数据重定向。

如tcpdump -l >tcpcap.txt将得到的数据存入tcpcap.txt文件中。

-n 不进行IP地址到主机名的转换。

如果不使用这一项,当系统中存在某一主机的主机名时,TcpDump会把IP地址转换为主机名显示,就像这样:eth0 <ntc9.1165>https://www.doczj.com/doc/2115715345.html,.telnet,使用-n后变成了:eth0 <192.168.0.9.1165 >192.168.0.1.telnet。

-nn 不进行端口名称的转换。

上面这条信息使用-nn后就变成了:eth0 <ntc9.1165 >https://www.doczj.com/doc/2115715345.html,.23。

-N 不打印出默认的域名。

还是这条信息-N 后就是:eth0 <ntc9.1165 >router.telnet。

-O 不进行匹配代码的优化。

-t 不打印UNIX时间戳,也就是不显示时间。

-tt 打印原始的、未格式化过的时间。

-v 详细的输出,也就比普通的多了个TTL和服务类型。

[expression]的用法:

expression是tcpdump最为有用的高级用法,可以利用它来匹配一些特殊的包。下面介绍一下expression的用法,主要是如何写出符合要求最为严格expression。如果tcpdump中没有expression,那么tcpdump会把网卡上的所有数据包输出,否则会将被expression匹配的包输出。

expression 由一个或多个[primitives]组成,而[primitives]由一个或多个[qualitifer]加一个id(name)或数字组成,它们的结构如用正则表达式则可表示为:

expression = ([qualitifer]+(id|number))+

依次看来,expression是一个复杂的条件表达式,其中[qualitifer]+(id|number)就是一个比较基本条件,qualitifer就表达一些的名称(项,变量),id或number则表示一个值(或常量)。

qualitifer共有三种,分别是:

type 表示id name或number涉及到的类型,这些词有host, nest, port ,portrange等等。

例子:

host foo 此为一个简单的primitive,host为qualitifer, foo为id name

net 128.3 net为qualitifer, 128.3为number

port 20

等等

每个privimtive必须有一个type词,如果表达式中没有,则默认是host.

dir 指定数据传输的方向,这些词有src, dst, src or dst, src and dst

例子:

dst net 128.3 ;此为一个相对复杂的primitive,结构为dir type number,表示目标网络为128.3的条件。

src or dst port ftp-data 此为比上一个相对简的结构,src or dst表示源或目标,ftp-data 为id,表示ftp协议中数据传输端口,故整体表示源或目标端口ftp-data的数据包即匹配。

如果在一个primitive中没有dir词,此默认为src or dst. 如host foo则表示源或目标主机为foo的数据包都匹配。

proto 此种词是用来匹配某种特定协议的,这些词包括:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet,tcp和udp。其实这些词经常用来匹配某种协议,是使用率最高的一组词了。

上面三种qualitifer和id name或number组成一个primitive通常是下面这种方式的:

proto dir type id(number) ,即primitive=proto dir type (id | number)

如:

tcp src port 80

ip dst host 192.168.1.1

如果出现type的话,一定会出现id或num

如果出现dir,那么也会出现type,如果不出现,默认为host

而proto可单独出现,如tcpdump 'tcp'

通过上面介绍的三种qualitifer,我们很快就可以写出一个primitive,下面我就只用一个primitive作为expression匹配数据包。

(1)匹配ether包

匹配特定mac地址的数据包。

tcpdump 'ether src 00:19:21:1D:75:E6'

匹配源mac为00:19:21:1D:75:E6的数据包其中src可改为dst, src or dst来匹改变条件

匹配ether广播包。ether广播包的特征是mac全1.故如下即可匹配:

tcpdump 'ether dst ff:ff:ff:ff:ff:ff'

ylin@ylin:~$ sudo tcpdump -c 1 'ether dst ff:ff:ff:ff:ff:ff'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

10:47:57.784099 arp who-has 192.168.240.77 tell 192.168.240.189

在此,只匹配1个包就退出了。第一个是arp请求包,arp请求包的是采用广播的方式发送的,被匹配那是当之无愧的。

匹配ether组播包,ether的组播包的特征是mac的最高位为1,其它位用来表示组播组编号,如果你想匹配其的多播组,知道它的组MAC地址即可。如

tcpdump 'ether dst ' Mac_Address表示地址,填上适当的即可。如果想匹配所有的ether多播数据包,那么暂时请放下,下面会继续为你讲解更高级的应用。

(2)匹配arp包

arp包用于IP到Mac址转换的一种协议,包括arp请求和arp答应两种报文,arp请求报文是ether广播方式发送出去的,也即arp请求报文的mac地址是全1,因此用ether dst FF;FF;FF;FF;FF;FF可以匹配arp请求报文,但不能匹配答应报文。因此要匹配arp的通信过程,则只有使用arp来指定协议。

tcpdump 'arp' 即可匹配网络上arp报文。

ylin@ylin:~$ arping -c 4 192.168.240.1>/dev/null& sudo tcpdump -p 'arp'

[1] 9293

WARNING: interface is ignored: Operation not permitted

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

11:09:25.042479 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local

11:09:25.042702 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)

11:09:26.050452 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local

11:09:26.050765 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)

11:09:27.058459 arp who-has 192.168.240.1 (00:03:d2:20:04:28 (oui Unknown)) tell ylin.local

11:09:27.058701 arp reply 192.168.240.1 is-at 00:03:d2:20:04:28 (oui Unknown)

11:09:33.646514 arp who-has ylin.local tell 192.168.240.1

11:09:33.646532 arp reply ylin.local is-at 00:19:21:1d:75:e6 (oui Unknown)

本例中使用arping -c 4 192.168.240.1产生arp请求和接收答应报文,而tcpdump -p 'arp'匹配出来了。此处-p选项是使网络工作于正常模式(非混杂模式),这样是方便查看匹配结果。

(3)匹配IP包

众所周知,IP协议是TCP/IP协议中最重要的协议之一,正是因为它才能把Internet互联起来,它可谓功不可没,下面分析匹配IP包的表达式。

对IP进行匹配

tcpdump 'ip src 192.168.240.69'

ylin@ylin:~$ sudo tcpdump -c 3 'ip src 192.168.240.69'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

11:20:00.973605 IP ylin.local.51486 > https://www.doczj.com/doc/2115715345.html,.ssh: S 2706301341:2706301341(0) win 5840

11:20:00.974328 IP ylin.local.32849 > 192.168.200.150.domain: 5858+ PTR?

20.200.168.192.in-addr.arpa. (45)

11:20:01.243490 IP ylin.local.51486 > https://www.doczj.com/doc/2115715345.html,.ssh: . ack 2762262674 win 183

IP广播组播数据包匹配:只需指明广播或组播地址即可

tcpdump 'ip dst 240.168.240.255'

ylin@ylin:~$ sudo tcpdump 'ip dst 192.168.240.255'

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

11:25:29.690658 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 1, length 64

11:25:30.694989 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 2, length 64

11:25:31.697954 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 3, length 64

11:25:32.697970 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 4, length 64

11:25:33.697970 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 5, length 64

11:25:34.697982 IP dd.local > 192.168.240.255: ICMP echo request, id 10022, seq 6, length 64

此处匹配的是ICMP的广播包,要产生此包,只需要同一个局域网的另一台主机运行ping -b 192.168.240.255即可,当然还可产生组播包,由于没有适合的软件进行模拟产生,在此不举例子。

(4)匹配TCP数据包

TCP同样是TCP/IP协议栈里面最为重要的协议之一,它提供了端到端的可靠数据流,同时很多应用层协议都是把TCP作为底层的通信协议,因为TCP的匹配是非常重要的。

如果想匹配HTTP的通信数据,那只需指定匹配端口为80的条件即可

tcpdump 'tcp dst port 80'

ylin@ylin:~$ wget https://www.doczj.com/doc/2115715345.html, 2>1 1 >/dev/null & sudo tcpdump -c 5 'tcp port 80'

[1] 10762

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

12:02:47.549056 IP https://www.doczj.com/doc/2115715345.html,.www > ylin.local.47945: S

1202130469:1202130469(0) ack 1132882351 win 2896

12:02:47.549085 IP ylin.local.47945 > https://www.doczj.com/doc/2115715345.html,.www: . ack 1 win 183

12:02:47.549226 IP ylin.local.47945 > https://www.doczj.com/doc/2115715345.html,.www: P 1:102(101) ack 1 win 183

12:02:47.688978 IP https://www.doczj.com/doc/2115715345.html,.www > ylin.local.47945: . ack 102 win 698

12:02:47.693897 IP https://www.doczj.com/doc/2115715345.html,.www > ylin.local.47945: . 1:1409(1408) ack 102 win 724

(5)匹配udp数据包

udp是一种无连接的非可靠的用户数据报,因此udp的主要特征同样是端口,用如下方法可以匹配某一端口

tcpdump 'upd port 53' 查看DNS的数据包

ylin@ylin:~$ ping -c 1 https://www.doczj.com/doc/2115715345.html, > /dev/null& sudo tcpdump -p udp port 53

[1] 11424

tcpdump: verbose output suppressed, use -v or -vv for full protocol decode

listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes

12:28:09.221950 IP ylin.local.32853 > 192.168.200.150.domain: 63228+ PTR?

43.22.108.202.in-addr.arpa. (44)

12:28:09.222607 IP ylin.local.32854 > 192.168.200.150.domain: 5114+ PTR? 150.200.168.192.in-addr.arpa. (46)

12:28:09.487017 IP 192.168.200.150.domain > ylin.local.32853: 63228 1/0/0 (80)

12:28:09.487232 IP 192.168.200.150.domain > ylin.local.32854: 5114 NXDomain* 0/1/0 (140)

12:28:14.488054 IP ylin.local.32854 > 192.168.200.150.domain: 60693+ PTR?

69.240.168.192.in-addr.arpa. (45)

12:28:14.755072 IP 192.168.200.150.domain > ylin.local.32854: 60693 NXDomain 0/1/0 (122)

使用ping https://www.doczj.com/doc/2115715345.html,目标是产生DNS请求和答应,53是DNS的端口号。

此外还有很多qualitifer是还没有提及的,下面是其它合法的primitive,在tcpdump中是可以直接使用的。

gateway host

匹配使用host作为网关的数据包,即数据报中mac地址(源或目的)为host,但IP报的源和目的地址不是host的数据包。

dst net net

src net net

net net

net net mask netmask

net net/len

匹配IPv4/v6地址为net网络的数据报。

其中net可以为192.168.0.0或192.168这两种形式。如net 192.168 或net 192.168.0.0

net net mask netmask仅对IPv4数据包有效,如net 192.168.0.0 mask 255.255.0.0

net net/len同样只对IPv4数据包有效,如net 192.168.0.0/16

dst portrange port1-port2

src portrange port1-port2

portrange port1-port2

匹配端口在port1-port2范围内的ip/tcp,ip/upd,ip6/tcp和ip6/udp数据包。dst, src分别指明源或目的。没有则表示src or dst

less length 匹配长度少于等于length的报文。

greater length 匹配长度大于等于length的报文。

ip protochain protocol 匹配ip报文中protocol字段值为protocol的报文

ip6 protochain protocol 匹配ipv6报文中protocol字段值为protocol的报文

如tcpdump 'ip protochain 6 匹配ipv4网络中的TCP报文,与tcpdump 'ip && tcp'用法一样,这里的&&连接两个primitive。6是TCP协议在IP报文中的编号。

ether broadcast

匹配以太网广播报文

ether multicast

匹配以太网多播报文

ip broadcast

匹配IPv4的广播报文。也即IP地址中主机号为全0或全1的IPv4报文。

ip multicast

匹配IPv4多播报文,也就是IP地址为多播地址的报文。

ip6 multicast

匹配IPv6多播报文,即IP地址为多播地址的报文。

vlan vlan_id

匹配为vlan报文,且vlan号为vlan_id的报文

到些为此,我们一直在介绍primitive是如何使用的,也即expression只有一个primitive。通过学会写好每个primtive,我们就很容易把多个primitive组成一个expression,方法很简单,通过逻辑运算符连接起来就可以了,逻辑运算符有以下三个:

“&&”或”and”

“||”或“or”

“!”或“not”

并且可通过()进行复杂的连接运算。

如tcpdump ‘ip && tcp’

tcpdump ‘host 192.168.240.3 &&( tcp port 80 || tcp port 443)’

通过上面的各种primitive,我们可以写出很丰富的条件,如ip, tcp, udp,vlan等等。如IP,可以按址址进行匹,tcp/udp可以按端口匹配。但是,如果我想匹配更细的条件呢?如tcp 中只含syn标志,fin标志的报文呢?上面的primitive恐怕无能为力了。不用怕,tcpdump 为你提供最后一个功能最强大的primitive,记住是primitive,而不是expression。你可以用多个这个的primitive组成更复杂的expression.

最后一个primitive形式为expr relop expr

若把这个形式记为A,那么你可这样写tcpdump 'A1 && A2 && ip src 192.168.200.1',等等。

下面我们就来分析A这个形式,看看这是如何强大,如果你觉得很乱的话,建议你先用用上面的知识来实际操作几次,要不然就会很乱的,因为expression太复杂了。

形式:expr relop expr

relop表示关系操作符,可以为>, < ,>=,<=, =, !=之一,

expr是一个算术表达式,由整数组成和二元运算符(+,-,*,/,&,|, <<, >>),长度操作,报文数据访问子。同时所有的整数都是无符号的,即0x80000000 和0xffffffff > 0。为了访问报文中的数据,可使用如下方式:

proto [ expr : size ]

proto表示该问的报文,expr的结果表示该报文的偏移,size为可选的,表示从expr偏移量起的szie个字节,整个表达式为proto报文中,expr起的szie字节的内容(无符号整数)

下面是expr relop expr这种形式primitive的例子:

'ether[0] & 1 !=0' ether报文中第0个bit为1,即以太网广播或组播的primtive。

通过这种方式,我们可以对报文的任何一个字节进行匹配了,因此它的功能是十分强大的。

‘ip[0] = 4’ip报文中的第一个字节为version,即匹配IPv4的报文,

如果我们想匹配一个syn报文,可以使用:'tcp[13] = 2',因为tcp的标志位为TCP报文的第13个字节,而syn在这个字节的低1位,故匹配只有syn标志的报文,上述条件是可满要求的,并且比较严格。

如果想匹配ping命令的请求报文,可以使用'icmp[0]=8',因为icmp报文的第0字符表

示类型,当类型值为8时表示为回显示请求。

对于TCP和ICMP中常用的字节,如TCP中的标志位,ICMP中的类型,这个些偏移量有时会忘记。不过tcpdump为你提供更方便的用法,你不用记位这些数字,用字符就可以代替了.

对于ICMP报文,类型字节可以icmptype来表示它的偏称量,上面的primitive可改为'icmp[icmptype] =8',如果8也记不住怎么办?tcpdump还为该字节的值也提供了字符表示,如'icmp[icmptype] = icmp-echo'。

下面是tcpdump提供的字符偏移量:

icmptype:表示icmp报文中类弄字节的偏移量

icmpcode:表示icmp报文中编码字节的偏移量

tcpflags:表示TCP报文中标志位字节的偏移量

此外,还提供了很多值来对应上面的偏移字节:

ICMP中类型字节的值可以是:

icmp-echoreply, icmp-unreach, icmp-sourcequench, icmp-redi‐rect, icmp-echo, icmp-routeradvert, icmp-routersolicit,

icmp-timxceed, icmp-paramprob, icmp-tstamp, icmp-tstam‐preply, icmp-ireq, icmp-ireqreply, icmp-maskreq, icmp-maskreply.

TCP中标志位字节的值可以是:

tcp-fin, tcp-syn, tcp-rst, tcp-push, tcp-ack, tcp-urg.

通过上面的字符表示,我们可以写出下面的primitive

'tcp[tcpflags] = tcp-syn' 匹配只有syn标志设置为1的tcp报文

'tcp[tcpflags] & (tcp-syn |tcp-ack |tcp-fin) !=0' 匹配含有syn,或ack或fin标志位的TCP 报文

对于IP报文,没有提供字符支持,如果想匹配更细的条件,直接使用数字指字偏移量就可以了,不过要对IP报文有更深入的了解才可以。

学会写primitive后,expression就是小菜一碟了,由一个或多个primitive组成,并且逻辑连接符组成即可:

tcpdump ‘host 192.168.240.91 && icmp[icmptype] = icmp-echo’

tcpdump ‘host 192.168.1.100 && vrrp’

tcpdump 'ether src 00:00:00:00:00:02 && ether[0] & 1 !=0'

让你随心所欲地使用tcpdump,将不用再从复杂的输出中去挑报文了!

如此,我们可以写出更复杂的表达式来匹配报文,如IP或TCP中的报文id,IP是中的分段标志,ICMP中类型和代码等。

Linux下抓包工具tcpdump应用详解

TCPDUMP简介 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer 工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。 用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用sniffer工具简直可以对网络中的所有流量一览无余!Sniffer 工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。 Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是必不可少的。所以,今天我们就来看看Linux中强大的网络数据采集分析工具——TcpDump。 用简单的话来定义tcpdump,就是:dump the traffice on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东东之一。 顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限的用户可以直接执行它来获取网络上的信息。因此系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其他计算机的安全存在威胁。 普通情况下,直接启动tcpdump将监视第一个网络界面上所有流过的数据包。 ----------------------- bash-2.02# tcpdump

linux之TCPDUMP网络抓包工具

Linux命令之TCPDUMP抓包 TCPDUMP又称网络数据包截获分析工具。支持针对网络层、协议、主机、网络或端口的过滤。并提供and、or、not等逻辑语句帮助去除无用的信息。 常用选项 -a 将网络地址和广播地址转变成名字 -d 将匹配信息包的代码以人们能够理解的汇编格式给出 -dd 将匹配信息包的代码以c语言程序段的格式给出 -ddd 将匹配信息包的代码以十进制的形式给出 -e 在输出行打印出数据链路层的头部信息 -f 将外部的Internet地址以数字的形式打印出来 -q 快速打印输出。即打印很少的协议相关信息,从而输出行都比较简短 -t 不显示时间 -l 使标准输出变为缓冲行形式 -n 不把网络地址转换成名字 -s 抓取数据包时默认抓取长度为68字节 -t 在输出的每一行不打印时间戳 -v 输出一个稍微详细的信息,如在ip包中可以包括ttl和服务类型的信息-v v 输出详细的报文信息 -c 在收到指定的包的数目后,tcpdump就会停止

-F 从指定的文件中读取表达式,忽略其它的表达式 -i 指定监听的网络接口 -r 从指定的文件中读取包(这些包一般通过-w选项产生) -w 直接将包写入文件中,并不分析和打印出来 -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议) -n 对地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。 -nn 除了-n的作用外,还把端口显示为数值,否则显示端口服务名。 -X 输出包的头部数据,会以16进制和ASCII两种方式同时输出。 -XX 输出包的头部数据,会以16进制和ASCII两种方式同时输出,更详细。 一、不指定任何参数 监听第一块网卡上经过的数据包。主机上可能有不止一块网卡,所以经常需要指定网卡。这样抓取的结果会非常多,滚动非常快。 [qh@root localhost]$tcpdump 二、监听指定网卡 [qh@root localhost]$tcpdump -i eth0 三、监听指定主机

Tcpdump的安装

Tcpdump的安装(TCP/IP sniffer工具) 在如今众多的黑客技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用sniffer工具简直可以对网络中的所有流量一览无余!Sniffer工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。其实,sniffer工具既可以适合于黑客的使用,也同样有利于网络管理员和网络程序员。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。 下面就向大家介绍一个在linux下优秀的嗅探器-------tcpdump.(我们下面的 操作都在redhat 6.2 linux 2.2.14的环境中经过实际测试.) 一. Tcpdump的安装 在linux下tcpdump的安装十分简单,一般由两种安装方式。一种是以rpm 包的形式来进行安装。另外一种是以源程序的形式安装。 1.rpm包的形式安装 这种形式的安装是最简单的安装方法,rpm包是将软件编译后打包成二进制的格式,通过rpm命令可以直接安装,不需要修改任何东西。以超级用户登录,使用命令如下: #rpm -ivh tcpdump-3_4a5.rpm 这样tcpdump就顺利地安装到你的linux系统中。怎么样,很简单吧。 2.源程序的安装 既然rpm包的安装很简单,为什么还要采用比较复杂的源程序安装呢?其实,linux一个最大的诱人之处就是在她上面有很多软件是提供源程序的,人们可以修改源程序来满足自己的特殊的需要。所以我特别建议朋友们都采取这种源程序的安装方法。 ·第一步取得源程序在源程序的安装方式中,我们首先要取得tcpdump 的源程序分发包,这种分发包有两种形式,一种是tar压缩包(tcpdump-3_4a5.tar.Z),另一种是rpm的分发包(tcpdump-3_4a5.src.rpm)。这两种 形式的内容都是一样的,不同的仅仅是压缩的方式.tar的压缩包可以使用如下命令解开: #tar xvfz tcpdump-3_4a5.tar.Z rpm的包可以使用如下命令安装:

Tcpdump常用命令及基础故障定位

tcpdump基础 Tcpdump常用命令及基础故障定位3板斧! 在老4k系统和TOS中的.1平台和.8平台(猎豹)支持TCPDUMP命令。 Tcpdump中and、not、or、host、port、grep、-e、-vv参数的使用: 例1:在eth1口抓包,只显示地址为10.1.1.1和icmp协议的报文。 Tcpdump –i eth1 host 10.1.1.1 and icmp 例2:在所有的接口抓包,不显示4000端口的管理报文,和23端口的telnet报文。 Tcpdump –i any not port 4000 and not port 23 (在同时管理的时候很实用) 例3:在eth1口抓包,显示地址为211.1.1.1或10.1.1.1的报文。 Tcpdump –i eth1 host 211.1.1.1 or host 10.1.1.1 (针对MAP前后的地址同时抓包定位时非常实用) 例4:在所有的接口抓包,显示地址为10.1.1.1报文。 Tcpdump |grep host 10.1.1.1 (在adls环境中非常实用,封装了PPPOE的报文也能抓到,但是TOS不支持grep 的参数了) 在tos系统中,X86的平台下才有抓包的工具,-n表示不需要域名解析,加快抓包的速度。 并且-evv比老的4k系统中,能抓到更多的信息,其中还包括校验和。 例5:System tcpdump –i any –evv -n (TOS系统中最后必须加-n的参数,才能保证抓包的速度) 例6:System tcpdump –i ipsec0-n(TOS支持在ipsec0中抓包,来判断数据流是否进入隧道) 例7:System tcpdump –i ppp0-n(TOS支持在ppp0中抓包,来判断数据流是否进入PPPoE的封装) 下面的4个实例,详细阐述了目的地址转换时如何通过TCPDUMP抓包来快速定位故障点。 现场通过抓包来定位故障原因是最准确高效的方法: 下面抓包中,客户端源地址为168.36.126.1MAP地址为209.136.47.12服务器真实地址为11.68.21.12 对于目的地址转换,天融信也俗称为MAP转换。 例1、如果业务、ping都不通,抓包时只有第一个请求报文,没有匹配MAP转换,说明: A: 防火墙没有到真实服务器的路由,而导致不能匹配MAP策略。 B: 或者是防火墙上没有开放对应的访问策略。 TOS# system tcpdump -i any host 168.36.126.1 -n 04:19:03.400000 IP 168.36.126.1 > 209.136.47.12: ICMP echo request, id 10706, seq 4161, length 64 例2、如果业务、ping都不通,抓包是匹配了MAP转换策略,说明: A: 对方的服务没有回应。 B: 或者对方回应了但是路由错误,回应数据包没有到防火墙。 TOS# system tcpdump -i any host 168.36.126.1 -n 04:19:03.400000 IP 168.36.126.1 > 209.136.47.12: ICMP echo request, id 10706, seq 4161, length 64 04:19:03.404216 IP 168.36.126.1 > 11.68.21.12: ICMP echo request, id 10706, seq 4161, length 64 例3、如果业务、ping都不通,抓包显示最后一个报文没有正常转换,说明: A: 防火墙上没有回指路由,而导致最后的报文没有发出。 TOS# system tcpdump -i any host 168.36.126.1 -n 04:19:03.400000 IP 168.36.126.1 >209.136.47.12: ICMP echo request, id 10706, seq 4161, length 64

tcpdump抓包高级用法

tcpdump抓包高级用法 【表达式】tcpdump –i ethx ether[xx:yy]=0xabcde… -nn 【说明】普通的tcpdump抓包后面直接跟主机,端口或协议等过滤条件,而这种抓包方法在某些环境下是无法使用的,如有QinQ,lwapp,wltp,pppoe等协议封装时,要抓电脑真实IP的数据包便实现不了。高级抓包方法可以满足,特别是在wlan环境下,经过我们设备的数据流都是经过隧道封装的,所以只能用高级抓包方法。高级抓包方法中的过滤条件为ether[xx:yy]=0xabcd….,表示从以太网帧头部开始偏移xx字节后的yy个字节的值是十六进制abcd….。如tcpdump –i eth0 ether[92:4]=0xab0d4f9c –nn,表示在eth0抓取符合下面条件的数据包,从以太网帧第92字节开始,后面4个字节的值为十六进制ab0d4f9c的所有数据包。这种抓包方法要求我们事先算好过滤条件对应的十六进制及其偏移值。下面举个例子说明。 【案例】如附件中的数据包,是wlan环境下隧道封装的数据包,用抓包软件打开只能看到隧道头地址,无法看到隧道内真实的IP地址。隧道内真实的IP所在的段为111.14.0.0/16,现要抓取111.14.236.138这个地址的数据包。 1.将111.14.236.138这个IP地址转换为十六进制为0x6f0eec8a 2.在eth0将所有的数据包抓100个下来(tcpdump –i eth0 –s0 –c 100 –w /tmp/test.pcap),如附件,用wireshark打开,找到隧道内真实IP地址,再算出真实IP地址偏移以太网头的字节数(这里应该会有问到怎样找到隧道内真实的IP头,请参考文章自定义协议剥离配置说明)。 3.这里已经算出来,111.14.0.0/16段的上行数据偏移以太网头92字节,下行数据偏移以太网头96字节,所以抓取111.14.236.138这个地址的所有数据包,tcpdump表达式应该如下:tcpdump –i eth0 ether[92:4]=0x6f0eec8a or ether[96:4]=0x6f0eec8a –nn

Tcpdump命令详解

tcpdump用法详解(1) (2006-04-13 14:23:04) 转载 分类:Linux专题 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量] [ -F 文件名] [ -i 网络接口] [ -r 文件名] [ -s snaplen ] [ -T 类型] [ -w 文件名] [表达式] (1). tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 不把网络地址转换成名字; -t 在输出的每一行不打印时间戳; -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定的文件中读取表达式,忽略其它的表达式; -i 指定监听的网络接口; -r 从指定的文件中读取包(这些包一般通过-w选项产生); -w 直接将包写入文件中,并不分析和打印出来; -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;)

(2). 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' ,'││';这些关键字可以组合起来构成强大的组合条件来满足人们的需要,下面举几个例子来说明。 A想要截获所有210.27.48.1 的主机收到的和发出的所有的数据包: #tcpdump host 210.27.48.1 B想要截获主机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 ) C如果想要获取主机210.27.48.1除了和主机210.27.48.2之外所有主机通信的ip包,使用命令: #tcpdump ip host 210.27.48.1 and ! 210.27.48.2 D如果想要获取主机210.27.48.1接收或发出的telnet包,使用如下命令: #tcpdump tcp port 23 host 210.27.48.1

tcpdump抓包并保存成cap文件

tcpdump抓包并保存成cap文件 首选介绍一下tcpdump的常用参数 tcpdump采用命令行方式,它的命令格式为: tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ] [ -i 网络接口 ] [ -r 文件名] [ -s snaplen ] [ -T 类型 ] [ -w 文件名 ] [表达式 ] 1. tcpdump的选项介绍 -a 将网络地址和广播地址转变成名字; -d 将匹配信息包的代码以人们能够理解的汇编格式给出; -dd 将匹配信息包的代码以c语言程序段的格式给出; -ddd 将匹配信息包的代码以十进制的形式给出; -e 在输出行打印出数据链路层的头部信息; -f 将外部的Internet地址以数字的形式打印出来; -l 使标准输出变为缓冲行形式; -n 不把网络地址转换成名字; -t 在输出的每一行不打印时间戳; -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定的文件中读取表达式,忽略其它的表达式; -i 指定监听的网络接口; -r 从指定的文件中读取包(这些包一般通过-w选项产生); -w 直接将包写入文件中,并不分析和打印出来; -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc(远程过程 调用)和snmp(简单网络管理协议;) 当网络出现故障时,由于直接用tcpdump抓包分析有点困难,而且当网络中数据比较多时更不容易分析,使用tcpdump的-w参数+ethereal分析会很好的解决这个问题,具体参数如下: tcpdump -i eth1 -c 2000 -w eth1.cap -i eth1 只抓eth1口的数据 -c 2000代表数据包的个数,也就是只抓2000个数据包 -w eth1.cap 保存成cap文件,方便用ethereal分析 抓完数据包后ftp到你的FTP服务器,put一下,然后用ethereal软件打开就可以很直观的分析了 注:有时将.cap文件上传到FTP服务器后,发现用ethreal打开时提示数据包大于65535个,这是你在ftp上传或者下载的时候没有用bin的模式上传的原因。另:有的网站提示在tcpdump中用-s 0命令,例如 tcpdump -i eth1 -c 2000 -s0 -w eth1.cap,可实际运行该命令时系统却提示无效的参数,去掉-s 0参数即可例子: [root@localhost cdr]#tcpdump -i eth0 -t tcp -s 60000 -w diaoxian.cap [root@localhost cdr]# tcpdump host 58.240.72.195 -s 60000 -w x.cap

TCPdump抓包及分析方法1

1关键字 Tcpdump,丢包,抓包 2Tcpdump抓包的作用 Tcpdump是linux系统自带的抓包工具,功能: >抓进出Linux服务器的IP包 >抓下的IP包,可由WireShark等工具,解码为UDP和RTP包。 >抓下的IP包,可由WireShark等工具分析丢包情况 3Tcpdump常用方法 Tcpdump是linux系统自带的抓包工具,需要root权限才能运行。 //抓网卡eth2上所有进出的数据包,如果没有数据包,则通常会抓到广播包 数会保留所有TS数据包,故重要。 3.4指定入向端口 设入向端口为11866,转换为十六进制,即是0x2e5a,所以: 其中,ether[36]和ether[37]为接收端口的16进制表示。 3.5指定出向端口 其中, Ether[34]和ether[35]为发送端口的16进制表示。 3.6长时间抓包 在抓包命令后加“-C 100”,它会满100M后写到下一个新的文件。直到磁盘满。 3.7后台执行 在抓包命令最后面再加一个&,这样可以后台一直抓。这样的话,登录窗口可以关掉。你想停止抓包,则得用PS把进程杀死。

4抓包分析快进快退 4.1找关键帧 RTP包是否为关键帧的标识保存在RTP扩展位中。WireShark查看RTP包是否为关键帧。 00或者10:普通帧 20或者30: 关键帧首包 40或者50: 关键帧中间包 80或者90: 关键帧尾包 注:以上判断之所以有“或者”,是因为关键帧位只占了3比特。 4.2判断时戳 如果抓包为32倍速,要判断时戳是否正常,则可以用抓包里的: (最大时戳-最小时戳)/90000/倍速=倍速播放时常

tcpdump抓包

tcpdump 必须使用 root 的身份执行 [root@linux ~]# tcpdump [-nn] [-i 接口] [-w 储存档名] [-c 次数] [-Ae] [-qX] [-r 档案] [所欲撷取的数据内容] 参数: -nn:直接以 IP 及 port number 显示,而非主机名与服务名称 -i :后面接要『监听』的网络接口,例如 eth0, lo, ppp0 等等的界面; -w :如果你要将监听所得的封包数据储存下来,用这个参数就对了!后面接档名 -c :监听的封包数,如果没有这个参数, tcpdump 会持续不断的监听, 直到使用者输入 [ctrl]-c 为止。 -A :封包的内容以 ASCII 显示,通常用来捉取 WWW 的网页封包资料。 -e :使用资料连接层 (OSI 第二层) 的 MAC 封包数据来显示; -q :仅列出较为简短的封包信息,每一行的内容比较精简 -X :可以列出十六进制 (hex) 以及 ASCII 的封包内容,对于监听封包内容很有用 -r :从后面接的档案将封包数据读出来。那个『档案』是已经存在的档案,并且这个『档案』是由 -w 所制作出来的。 所欲撷取的数据内容:我们可以专门针对某些通讯协议或者是 IP 来源进行封包撷取,那就可以简化输出的结果,并取得最有用的信息。常见的表示方法有: 'host foo', 'host 127.0.0.1' :针对单部主机来进行封包撷取 'net 192.168' :针对某个网域来进行封包的撷取; 'src host 127.0.0.1' 'dst net 192.168':同时加上来源(src)或目标(dst)限制 'tcp port 21':还可以针对通讯协议侦测,如 tcp, udp, arp, ether 等还可以利用 and 与 or 来进行封包数据的整合显示呢! 范例一:以121.9.240.130这台测试机为基础. [root@linux ~]# tcpdump 09:25:40.856970 IP 59.37.164.34.12670 > 121.9.222.91.15649: UDP, length 82 09:25:40.857025 IP 121.9.222.64.15583 > https://www.doczj.com/doc/2115715345.html,.3001: UDP, length 82 09:25:40.857026 IP 121.9.223.171.25511 > 222.223.23.168.2471: P 1681367693:1681367882(189) ack 169128214 win 65455 09:25:40.857027 IP 121.9.222.182.15502 > 218.15.245.162.16059: UDP, length 14 09:25:40.857068 IP 119.132.101.206.3001 > 121.9.222.183.15164: UDP, length 82 09:25:40.857118 IP 121.9.222.175.15693 > 202.101.190.242.3001: UDP, length 82 09:25:40.857119 IP 121.9.222.175.15693 > 202.101.190.242.3001: UDP, length 82 09:25:40.857121 IP 59.34.127.210.43659 > 121.9.222.243.15716: UDP, length 14 09:25:40.857122 IP 121.9.222.87.15030 > 119.132.101.206.3001: UDP, length 14 09:25:40.857123 IP 121.9.222.88.15278 > 113.14.161.238.3001: UDP, length 14 09:25:40.857170 IP https://www.doczj.com/doc/2115715345.html,.3001 > 121.9.222.93.15400: UDP, length 14 09:25:40.857218 IP 58.242.202.10.3001 > 121.9.222.87.15300: UDP, length 10 09:25:40.857219 IP https://www.doczj.com/doc/2115715345.html,.3001 > 121.9.222.242.14920: UDP, length 18

linux tcpdump

Linux 网络数据采集分析工具Tcpdump Tcpdump简介: 在传统的网络分析和测试技术中,嗅探器(sniffer)是最常见,也是最重要的技术之一。sniffer工具首先是为网络管理员和网络程序员进行网络分析而设计的。对于网络管理人员来说,使用嗅探器可以随时掌握网络的实际情况,在网络性能急剧下降的时候,可以通过sniffer工具来分析原因,找出造成网络阻塞的来源。对于网络程序员来说,通过sniffer工具来调试程序。 用过windows平台上的sniffer工具(例如,netxray和sniffer pro软件)的朋友可能都知道,在共享式的局域网中,采用sniffer工具简直可以对网络中的所有流量一览无余!Sniffer工具实际上就是一个网络上的抓包工具,同时还可以对抓到的包进行分析。由于在共享式的网络中,信息包是会广播到网络中所有主机的网络接口,只不过在没有使用sniffer工具之前,主机的网络设备会判断该信息包是否应该接收,这样它就会抛弃不应该接收的信息包,sniffer工具却使主机的网络设备接收所有到达的信息包,这样就达到了网络监听的效果。 Linux作为网络服务器,特别是作为路由器和网关时,数据的采集和分析是必不可少的。所以,今天我们就来看看Linux中强大的网络数据采集分析工具——TcpDump。 用简单的话来定义tcpdump,就是:dump the traffice on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。 作为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能,灵活的截取策略,成为每个高级的系统管理员分析网络,排查问题等所必备的东东之一。 顾名思义,TcpDump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。 tcpdump提供了源代码,公开了接口,因此具备很强的可扩展性,对于网络维护和入侵者都是非常有用的工具。tcpdump存在于基本的FreeBSD系统中,由于它需要将网络界面设置为混杂模式,普通用户不能正常执行,但具备root权限

F5负载均衡器用tcpdump命令抓包的方法

F5负载均衡器用tcpdump命令的抓包方法作者:邹善 部门:业务与软件技术服务器支撑技术团队 参考文档:<> 林浩泓 本文简单介绍在F5负载均衡器上用tcpdump命令进行抓包的方法,希望能对调试F5负载均衡器时有所帮助。 用tcpdump命令可以观察到从client端发出来的数据包有没有到F5负载均衡器,F5负载均衡器有没有把收到的数据包按设置发送出去,F5负载均衡器有没有收到后面真实服务器发过来的数据包。Tcpdump命令可以对从client端到F5再到真实服务器的数据流进行跟踪。 Tcpdump命令是F5本身自带的命令,不需要额外安装其他软件包。 1 Tcpdump命令 本文讲述TCPDUMP命令的基本用法,更详细的使用说明请参见“man tcpdump”。 命令语法: tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ] 其中: -e在输出行打印出数据链路层的头部信息 -i报文捕获监听的接口,如果不指定,默认为系统最小编号的接口(不包括

loop-back接口) -n不将IP地址或端口号转化为域名或协议名称 -r从文件中读取(该文件由-w选项创建) -s确定捕获报文大小 -w直接将捕获报文写入文件,而不是对其进行解析并通过屏幕显示(与-r选项对应) -x每个报文以十六进制方式显示 -X每个报文同时以文本和十六进制显示 expression匹配表达式的分组将进行解析。如果不指定表达式,系统对所有分组进行捕获分析。复杂表达式可以使用“and”与、“or”或以及“not”非操作进行 组合。表达式有三种: ?type三种种类:host、net和port。比如:host 10.1.1.1。如果不指定类型,默认为host。 ?dir有src、dst、src or dst和src and dst四种方向。默认为src or dst,即双向。 proto常见协议有:ip、arp、tcp、udp、icmp等。如果不指定协议类型,默认 为所有协议。 2 在F5上用tcpdump抓包示例 以上图数据流为例,在F5上可以用tcpdump命令分别定位手机的数据流有没有到达F5负

tcpdump中文手册

TCPDUMP中文手册 名称(NAME) tcpdump-转储网络上的数据流 总览(SYNOPSIS) tcpdump[-adeflnNOpqStvx][-ccount][-Ffile] [-iinterface][-rfile][-ssnaplen] [-Ttype][-wfile][expression] 描述(DESCRIPTION) Tcpdump打印出在某个网络界面上,匹配布尔表达式expression的报头. 对于SunOS的nit或bpf界面:要运行tcpdump,你必须有/dev/nit或/dev/bpf*的读访问权限. 对于Solaris的dlpi:你必须有网络仿真设备(networkpseudodevice),如/dev/le的读访问权限. 对于HP-UX的dlpi:你必须是root,或者把它安装成root的设置uid程序.对于IRIX的snoop:你必须是root,或者把它安装成root的设置uid程序.对于Linux:你必须是root,或者把它安装成root的设置uid程序. 对于Ultrix和DigitalUNIX:一旦超级用户使用pfconfig(8)开放了promiscuous操作模式(promiscuous-mode),任何用户都可以运行tcpdump. 对于BSD:你必须有/dev/bpf*的读访问权限. 选项(OPTIONS) -a 试着把网络和广播地址转换成名称. -c 当收到count报文后退出. -d 把编译好的报文匹配模板(packet-matchingcode)翻译成可读形式,传往标准输出,然后退出. -dd 把报文匹配模板(packet-matchingcode)以C程序片断的形式输出. -ddd 把报文匹配模板(packet-matchingcode)以十进制数形式输出(前面加上总数). -e 每行都显示链路层报头. -f 用数字形式显示'外部的'互联网地址,而不是字符形式(这个选项用来绕开脑壳坏光的SUN黄页服务器的问题---一般说来它翻译外部网络数字地址的时候会长期挂起). -F 把file的内容用作过滤表达式.忽略命令行上的表达式. -i 监听interface.如果不指定接口,tcpdump在系统的接口清单中,寻找号码最小,已经配置好的接

tcpdump抓包丢失问题

1 近日用tcpdump抓包,发现有大量的丢包出现("packets dropped by kernel"), 如下: tcpdump -i eth0 dst port 1234 and udp -s 2048 -X -tt >a.pack 264 packets captured 3043 packets received by filter 2706 packets dropped by kernel 丢包原因: 经过google以及分析,造成这种丢包的原因是由于libcap抓到包后,tcpdump 上层没有及时的取出,导致libcap缓冲区溢出,从而覆盖了未处理包,此处即显示为dropped by kernel,注意,这里的kernel并不是说是被linux内核抛弃的,而是被tcpdump的内核,即libcap抛弃掉的,上层监听到 1234端口的server可以正常的获取数据。 解决方法: 根据以上分析,可以通过改善tcpdump上层的处理效率来减少丢包率,下面的几步根据需要选用,每一步都能减少一定的丢包率 1.最小化抓取过滤范围,即通过指定网卡,端口,包流向,包大小减少包数量 2. 添加-n参数,禁止反向域名解析 tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -X -tt >a.pack 大多数情况这样就可以解决了 可以通过改善tcpdump上层的处理效率来减少丢包率 3. 将数据包输出到cap文件 tcpdump -i eth0 dst port 1234 and udp -s 2048 -n -X -tt -w a.cap 用了这一步,基本上所有的网络server都可以搞定了 4. 用sysctl修改SO_REVBUF参数,增加libcap缓冲区长度

F5负载均衡抓包方法

F5负载均衡抓包方法 作者:易隐者发布于:2012-10-17 12:48 Wednesday 分类:参考资料 登录F5 1,超级终端的登录: 通过Console电缆一端连接BIGIP,一端连接PC机的串口,然后打开超级终端,建立一个连接,超级终端中COM的参数设置如图: 不论是从Console口登陆,还是用SSH从网络登陆,BIG-IP的缺省登陆帐号与密码如下:缺省登陆帐号:root 缺省登陆密码:default 输入帐号和密码后,将见到以下界面:

缺省的终端类型为vt100,回车后如图: F5下的tcpdump的使用 1,web管理界面下的抓包 Tcpdump 工具在V4.5 之前只能在CLI 下使用,V9 提供了图形界面下的Tcpdump,在System->support 界面下,我们可以直接使用tcpdump 工具:

2,F5命令行下Tcpdump的使用示例: 当业务无法正常工作时,经常需要在BIG-IP上抓包进行分析定位是什么原因导致数据包没有被常转发。BIG-IP上提供了TCPDUMP抓包分析工具。 TCPDUMP是Unix系统常用的报文分析工具,TCPDUMP经常用于故障定位,如会话保持失效、SNAT通信问题等。本文讲述TCPDUMP命令的基本用法,更详细的使用说明请参见“man tcpdump”。 命令语法: tcpdump [ -adeflnNOpqRStvxX ] [ -c count ] [ -F file ] [ -i interface ] [ -m module ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -E algo:secret ] [ expression ] 其中: ?-i 报文捕获监听的接口,如果不指定,默认为系统最小编号的接口(不包括loop- back 接口),一般对指定Vlan名称进行监控,如-i external 是对external vlan进行监控;也可以对指定端口进行监控如–i 1.1。注意:当vlan 名称过长时,-i后面直接用vlan 名称,tcpdump会出现错误提示,这时需要将vlan名改由vlan加vlan ID代替。如有一vlan 名称为bip_external,vlan ID为2022,如要对bip_externalvlan进行监听,需采用-i vlan2022的方式。 ?-nn 不将IP地址或端口号转化为域名或协议名称 注:与BIG-IP 4.5版本的TCPDUMP命令不一样,在BIG-IP V9里面必须用两个nn才能使IP地址与端口不会被转化为域名或协议名称显示。 ?-r 从文件中读取(该文件由-w选项创建) ?-s 确定捕获报文大小 ?-w 直接将捕获报文写入文件,而不是对其进行解析并通过屏幕显示(与-r选项对应)

tcpdump软件抓包方案_抓取安卓设备的网络数据包

tcpdump工具抓包方案

一、前言 二、核心思想 三、环境搭建 四、抓包流程 五、问题支持 六、遗留B O S S

一、前言 利用tcpdump工具进行抓包其实就是我们之前一直说的“模拟器抓包”,当我们细细研究整个抓包过程后发现类似于“模拟器抓包”等说法其实并不严谨,因为这种抓包方式仅仅是需要借助安卓模拟器中SDK的环境,而整个抓包的过程很大程度上都要依赖tcpdump这个工具。因此,为了之后能更深入的研究类似的抓包方法,在这里我们将使用linux命令调用tcpdump工具来截获网络中的数据包这一方法称之为“tcpdump方法。” 二、核心思想 TcpDump是Linux中强大的网络数据采集分析工具之一。而安卓系统就是基于Linux语言的,因此利用这个工具我们就能很轻松的抓取安卓系统上的数据包。表述这种方法的关键词是“安卓SDK环境”、“linux命令”“tcpdump工具”,严谨一点来说,即:搭建一个SDK环境,通过adb连接设备,并对设备中的tcpdump工具下达linux命令来进行抓包,并传回PC端。 注: SDK:Software Development Kit, 即软件开发工具包 Linux:Linux是一种自由和开放源码的类Unix操作系统,安卓手机的核心正是基于Linux内核。 adb:Android Debug Bridge,即安卓调试桥。用来直接操作管理android模拟器或者真实的andriod设备。

三、环境搭建 首先安装JDK 文件,并一步一步往下走直到安装完成,这里提供的是JDK1.6版本。这里要注意的是,安装路径不要太过复杂,因为接下来配置环境时要用到这个路径。 ①安装JDK 并配置Java 环境所需资源:JDK 安装包、SDK 模拟器、tcpdump 工具、Root Explorer 以上资源均已准备好,请点击右侧这位女同志跳转至相应页面下载工具包。 安装完成以后,接下来便要完成Java 环境的配置,这一步虽然操作起来简单,但是也是非常容易出错的。安装软件——配置环境——监测配置是否正确

tcpdump抓包分析TCP三次握手过程

2012年1月MVP申请倒计时——13日截止“IT适合你吗?”智力挑战tcpdump抓包分析TCP三次握手过程 分类:TCP/IP与套接字编程2010-10-09 15:11 566人阅读评论(0) 收藏举报转:https://www.doczj.com/doc/2115715345.html,/xxjjyy2008/blog/item/e6566bf837d91903d9f9fdd0.html 一、tcpdump使用 1、首先看下MAN手册 TCPDUMP(8) NAME tcpdump - dump traffic on a network SYNOPSIS tcpdump [ -AdDeflLnNOpqRStuUvxX ] [ -c count ] [ -C file_size ] [ -F file ] [ -i interface ] [ -m module ] [ -M secret ] [ -r file ] [ -s snaplen ] [ -T type ] [ -w file ] [ -W filecount ] [ -E spi@ipaddr algo:secret,... ] [ -y datalinktype ] [ -Z user ] [ expression ] 选项: -A 以ASCII码显示消息包 -c 指定包个数 -C 配合-w,当写入文件时,先检查文件大小是否已经超过1M,若超过,生成新文件,文件名为指定文件名加后缀1。 -d 将匹配信息包的代码以人们能够理解的汇编格式给出 -dd 将匹配信息包的代码以c语言程序段的格式给出

-ddd 将匹配信息包的代码以十进制的形式给出。 -D 列出可以抓包的所有网络接口 -e 显示链路层内容 -f 外部的IP以数字方式显示 -i 指定网络接口 -l 使标准输出变为缓冲行形式 -n IP,端口用数字方式显示 -t 在输出的每一行不打印时间戳; -v 输出一个稍微详细的信息,例如在ip包中可以包括ttl和服务类型的信息; -vv 输出详细的报文信息; -c 在收到指定的包的数目后,tcpdump就会停止; -F 从指定的文件中读取表达式,忽略其它的表达式; -i 指定监听的网络接口; -r 从指定的文件中读取包(这些包一般通过-w选项产生); -w 直接将包写入文件中,并不分析和打印出来; -T 将监听到的包直接解释为指定的类型的报文,常见的类型有rpc (远程过程调用)和snmp(简单网络管理协议;) -x 让十六进制显示包内容 2、过滤 (1)指定接口(-i) 如:tcpdump -i eth0 (2)指定IP地址(host),可以辅加and , or ,!等逻辑符,以及src,dest等表示方向。 如:tcpdump host 192.168.1.23 捕获192.168.1.23发出或者收到的包

相关主题
文本预览
相关文档 最新文档