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

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

2012年1月MVP申请倒计时——13日截止“IT适合你吗?”智力挑战tcpdump抓包分析TCP三次握手过程

分类:TCP/IP与套接字编程2010-10-09 15:11 566人阅读评论(0) 收藏举报转:https://www.360docs.net/doc/8d7134950.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发出或者收到的包

tcpdump -A host 192.168.1.90 and /( 192.168.1.104 or 192.168.1.105 /) 捕获

192.168.1.23与192.168.1.104或者192.168.1.105之间往来的包

tcpdump host ! 192.168.1.23 捕获除192.168.1.23以外所有主机的包

tcpdump -A src 192.168.1.90 and dst 192.168.1.104 指定从90发往104的包

(3)指定端口(port)

如:tcpdump port 80 指定捕获80端口的包

(4)指定协议( 协议包括:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp and udp)如:tcpdump tcp 指定捕获TCP包

(5)其它(gateway, broadcast, less, greater)

如:tcpdump broadcast 所有广播包

二、三次握手过程分析

用netstat -an | grep LISTEN看一下,当前主机正在监听的端口,使用另一台机telnet过来,不输入任何内容,进行抓包。

我们这里以6000为例

tcpdump port 6000 -c 3 -n

内容如下:

21:07:17.790296 IP 192.168.1.104.2511 > 192.168.1.90.6000: S

3359422806:3359422806(0) win 64240

21:07:17.790317 IP 192.168.1.90.6000 > 192.168.1.104.2511: S

3675079922:3675079922(0) ack 3359422807 win5840 21:07:17.790675 IP 192.168.1.104.2511 > 192.168.1.90.6000: . ack 1 win 64240

我们来对第一个包进行分析:

21:07:17(时间).

790296(ID号)

IP (协议)

192.168.1.104.2511 > 192.168.1.90.6000: (源IP,端口,目的IP,端口)中间>表示方向

S (表示为SYN包,即发起连接包

紧急指针— URG

确认序号有效—ACK

接收方应该尽快将这个报文段交给应用层—PSH

重建连接—RST

同步序号用来发起一个连接—SYN

发端完成发送任务—IN

)

3359422806:3359422806(0) (IP包序号,相对序号为0)

win 64240 (数据窗口大小,告诉对方本机接收窗口大小,windows下默认为64240,可通过setsockopt动态修改,同样可以通过修改注册表项

(HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/Services/Tcpip/Paramet ers的TCPWindowSize)来更改默认值)

对应TCP包头中的选项字段

MSS: Maxitum Segment Size 最大分段大小,MSS表示TCP传往另一端的最大块数据的长度。当一个连接建立时,连接的双方都要通告各自的MSS。如果一方不接收来自另一方的MSS值,则MSS就定为默认的536字节。

以上三个包正好是TCP连接的三次握手过程:

(1)A主机发送序号为3359422806的SYN包到B,同时带有自身的WIN和MSS大小。

(2)B主机收到后,发送SYN+ACK的返回包到A,也带自身的WIN和MSS 大小,3675079922,同时为为上一个包的应答包3359422807。

(3)A主机返回ACK,包序号为1(相对序号,如果需要看绝对序号,可以在tcpdump命令中加-S)

然后我们再来分析一下包的具体内容:

我们在tcpdump命令中加-x选项,后可得到如下内容:

22:07:13.436638 IP 192.168.1.104.2799 > 192.168.1.90.6000: S

3480877812:3480877812(0) win 64240 0x0000: 4500 0030 b195 4000 8006 c51f c0a8 0168

0x0010: c0a8 015a 0aef 1770 cf79 faf4 0000 0000

0x0020: 7002 faf0 174e 0000 0204 05b4 0101 0402

22:07:13.436675 IP 192.168.1.90.6000 > 192.168.1.104.2799: S

4226616929:4226616929(0) ack 3480877813 win 5840 0x0000: 4500 0030 0000 4000 4006 b6b5 c0a8 015a

0x0010: c0a8 0168 1770 0aef fbed 0e61 cf79 faf5

0x0020: 7012 16d0 f10e 0000 0204 05b4 0101 0402

22:07:13.437019 IP 192.168.1.104.2799 > 192.168.1.90.6000: . ack 1 win 64240 0x0000: 4500 0028 b196 4000 8006 c526 c0a8 0168

0x0010: c0a8 015a 0aef 1770 cf79 faf5 fbed 0e62

0x0020: 5010 faf0 39b2 0000

还是一样,我们对第一个包进行分析,第一个包为SYN包,应该为一个空包,即只包括IP头和TCP头。

IP包头

4 -IP版本号IPV4

5 -IP包头长度5个32字节

00 -TOS (000 0000 0)前三个BIT优先权,现已忽略;4 bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用,均为0表示一般服务;最后1BIT未用。

0030 -总长度,48个字节

b195 -包唯一标识

4000 -标志字段,和片偏移,用于分片

80 -TTL(128)

06 -协议TCP

c51f -MAC

c0a8 0168 -SRC IP,可以inet_ntoa转换成点号分隔的IP。

c0a8 015a -DST IP

TCP包头

0aef -源端口,十进制为2799

1770 -目的端口,十进制为6000

cf79 faf4 包序号,十进制为217554863

0000 0000 确认序号,0,未设置ACK,确认序号无效

7002 -TCP包头长度,标志位。(0111 000000 000010)前4bitTCP长度7个32BIT,中间6bit保留,后6bit为标志位(URG, ACK,PSH,RST,SYN,FIN),可以看出设置了倒数第二位,SYN位。

faf0 -窗口大小,十进制为64240

174e -校验和,覆盖了整个的T C P报文段: T C P首部和T C P数据

0000 -紧急指针,只有当URG标志置1时紧急指针才有效

0204 05b4 0101 0402 -选项字段,8个字节

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.360docs.net/doc/8d7134950.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.360docs.net/doc/8d7134950.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.360docs.net/doc/8d7134950.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.360docs.net/doc/8d7134950.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发出或者收到的包

相关文档
最新文档