tcpdump是最快捷方便的抓包方式,还能够加深对网络协议的理解。android下能够经过以下方式抓包: 1 Android上启动tcpdump
Android设备能够把tcpdump的可执行文件上传到android设备上,而后经过mac远程登陆android设备运行tcpdump,前提是这台android设备必须已经root过。步骤以下:html
下载android版本的tcpdump linux
从这个连接 能够下载到专门为android系统编译的tcpdump版本。android
经过adb将tcpdump上传到android设备 ios
经过adb push将tcpdump文件上传到特定的目录,这里咱们选择/sdcard/data目录。git
<img src="https://pic3.zhimg.com/42eb868d9be25a56d0c6dc4418fcd9a6_b.png" data-rawwidth="1188" data-rawheight="232" class="origin_image zh-lightbox-thumb" width="1188" data-original="https://pic3.zhimg.com/42eb868d9be25a56d0c6dc4418fcd9a6_r.png">
在android设备上运行tcpdump github
经过adb shell登录设备,并执行tcpdump,最后一步执行./tcpdump便可。正则表达式
<img src="https://pic3.zhimg.com/7e4f2b2b37ccd973c8cd42bfb4df87aa_b.png" data-rawwidth="960" data-rawheight="186" class="origin_image zh-lightbox-thumb" width="960" data-original="https://pic3.zhimg.com/7e4f2b2b37ccd973c8cd42bfb4df87aa_r.png">
2. 分析tcpdump输出
通过上面的步骤成功运行tcpdump以后,接下来就能够分析输出的网络包内容了,iOS设备和Android设备的输出是一致的。咱们先来解析下几个基本的格式:shell
<img src="https://pic3.zhimg.com/a00d7dbce107fa6b5c03519730624352_b.png" data-rawwidth="1710" data-rawheight="886" class="origin_image zh-lightbox-thumb" width="1710" data-original="https://pic3.zhimg.com/a00d7dbce107fa6b5c03519730624352_r.png">
图中红色方框内的部分是一个ip包的详细记录,相似的纪录还有好几条。这里咱们着重分析第一条的各部分字段含义。缓存
14:37:41.615018 很简单,是该包接收到的时间。安全
17.143.164.37.5223 是发送方的ip地址及端口号(5223是端口号)。
10.29.44.140.58036 是我android的ip地址及端口号。
Flags [P.] 是tcp包header部分的第14个字节的P位。这个字节所包含的几个flag很重要,后面我会单独详细讲解。这里P位表示接受方须要立刻将包push到应用层。
seq 1:54 tcp包的seq号,1是起始值,54结束值。tcp之因此被认为是流,是由于tcp包所携带的每个字节都有标号(seq号)。1:54代表总共有54个字节被接受,其中一个字节是三次握手阶段所使用,因此一共发送的长度是53字节。
ack 101 tcp包的ack号,ack 101代表seq号为100的字节已被确认收到,下一个指望接收的seq号从101开始。
win 255 win表示的是tcp包发送方,做为接受方还能够接受的字节数。这里win 255代表ip为17.143.164.37的主机还能够接受255个字节。
options [nop,nop,…] options[…]表示的是该tcp包的options区域,nop是no opertion的缩写,没什么实际用途,主要是用作padding,由于options区域按协议规定必须是4字节的倍数。
options[… TS val 2381386761] ts val这个值是tcp包的时间戳,不过这个时间戳和设备的系统时间没啥关系,刚开始是随机值,后面随着系统时钟自增加。这个时间戳主要用处是seq序列号越界从0从新开始后,能够确认包的顺序。
options[… ecr 427050796] ts ecr这个值主要用来计算RTT。好比A发送一个tcp包给B,A会在包里带上TS val,B收到以后在ack包里再把这个值原样返回,A收到B的ack包以后再根据本地时钟就能够计算出RTT了。这个值只在ack包里有效,非ack包ecr的值就为0.
length 53 这个length是应用层传过来的数据大小,不包括tcp的header。这个值和咱们上面分析的seq 1:54是一致的。
以上就是一个基本的tcp包结构,你们能够按照上面的分析再把其余几个包理解下。咱们在作应用的时候面对的更可能是http协议,但对一个http请求是怎么经过tcp/ip分解成一个个的packet,而后怎么在网络上稳定可靠的传输,要有个基本的印象。下面咱们再看下tcpdump更多的功能,这些功能都是基于对tcp/ip协议的理解,遇到不理解的建议多google下相关的技术概念。
3. tcpdump知识拓展
再继续深刻tcpdump以前,先贴上一张tcp header格式图,常看常新。
[https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true ](https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true )" width="1056">
3.1 TCP Flags(tcp header第十四个字节)
咱们再仔细看下上面提到的flags概念,flags位于tcp header的第十四个字节,包含8个比特位,也就是上图的CWR到FIN。这8个比特位都有特定的功能用途,分别是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。
CWR ,ECE 两个flag是用来配合作congestion control的,通常状况下和应用层关系不大。发送方的包ECE(ECN-Echo)为0的时候表示出现了congestion,接收方回的包里CWR(Congestion Window Reduced)为1代表收到congestion信息并作了处理。咱们重点看其余六个flag。
URG URG表明Urgent,代表包的优先级高,须要优先传送对方并处理。像咱们平时使用terminal的时候常常ctrl+c来结束某个任务,这种命令产生的网络数据包就须要urgent。
ACK 也就是咱们所熟悉的ack包,用来告诉对方上一个数据包已经成功收到。不过通常不会为了ack单独发送一个包,都是在下一个要发送的packet里设置ack位,这属于tcp的优化机制,参见delayed ack 。
PSH Push咱们上面解释过,接收方接收到P位的flag包须要立刻将包交给应用层处理,通常咱们在http request的最后一个包里都能看到P位被设置。
RST Reset位,代表packet的发送方立刻就要断开当前链接了。在http请求结束的时候通常能够看到一个数据包设置了RST位。
SYN SYN位在发送创建链接请求的时候会设置,咱们所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。
FIN Finish位设置了就表示发送方没有更多的数据要发送了,以后就要单向关闭链接了,接收方通常会回一个ack包。接收方再同理发送一个FIN就能够双向关闭链接了。
这8个flag首字母分别是:C E U A P R S F。初看难以记忆,我脑洞了下,把它们组合成 supr cafe,固然少了super少了个e,我能够将就下。咱们在使用tcpdump的时候会常常看到这几个flag,[S],[P],[R],[F],[.]。其余几个都好理解,[.]特殊点,是个占位符,没有其余flag被设置的时候就显示这个占位符,通常表示ack。
3.2 tcpdump 更多使用参数
这部分咱们来看下tcpdump经常使用的一些命令参数。文章最开始部分的tcpdump命令是这样的:sudo tcpdump -i rvi0 -AAl。 -i rvi0 -AAl都是属于参数部分。常见的有这些:
-i, 要监听的网卡名称,-i rvi0监听虚拟网卡。不设置的时候默认监听全部网卡流量。
-A, 用ASCII码展现所截取的流量,通常用于网页或者app里http请求。-AA能够获取更多的信息。
-X,用ASCII码和hex来展现包的内容,和上面的-A比较像。-XX能够展现更多的信息(好比link layer的header)。
-n,不解析hostname,tcpdump会优先暂时主机的名字。-nn则不展现主机名和端口名(好比443端口会被展现成https)。
-s,截取的包字节长度,默认状况下tcpdump会展现96字节的长度,要获取完整的长度能够用-s0或者-s1600。
-c,只截取指定数目的包,而后退出。
-v,展现更多的有用信息,还能够用-vv -vvv增长信息的展现量。
src,指明ip包的发送方地址。
dst,指明ip包的接收方地址。
port,指明tcp包发送方或者接收方的端口号。
and,or,not,操做法,字面意思。
上面几个是我我的比较经常使用的,更多的参数能够参考这个详细文档 。有兴趣的能够分析下面几个例子练习下:
tcpdump ‘tcp[13] & 16!=0’
tcpdump src port 80 and tcp
tcpdump -vv src baidu and not dst port 23
tcpdump -nnvvS src 192.0.1.100 and dst port 443
4. 用tcpdump分析http完整请求
说了这么多,咱们再来实战下,看一个完整的http请求流程。 下面截图里的流量是我监听的 知乎App点赞以后发送的一个https请求。我以前先分析过server的ip地址了,tcpdump命令是:
sudo tcpdump -i rvi0 -AAl src 60.28.215.123 or dst 60.28.215.123
<img src="https://pic3.zhimg.com/ae670a08a7ab35dc7887b2f8e55b607e_b.png" data-rawwidth="1780" data-rawheight="1596" class="origin_image zh-lightbox-thumb" width="1780" data-original="https://pic3.zhimg.com/ae670a08a7ab35dc7887b2f8e55b607e_r.png">
图中列出了6个前面的packet,10.29.44.240是我android的ip地址,60.28.215.123是知乎server的ip地址,红色方框内是android发出的packet,白色方框内是server发出的packet。packet1是android三次握手的第一个syn包,packet2是server ack+syn的包,packet3是android ack的包。这3个packet以后tcp的三次握手就完成了。
packet4是android发出的http request。长度只有240个字节,因此一个packet就发过去了,固然还设置了flags的P位,request须要立刻被应用层处理。包里面出现了spdy,点赞。
packet5是server ack刚收到的包,长度位0,因此这仅仅是一个ack包。
packet6是server返回http的response了,1388个字节。packet5和packet6都ack了seq为241的包,固然是为了增长ack的成功率。
中间还有好几个packet就不仔细分析了,最后再看下请求完成的最后几个包:
<img src="https://pic4.zhimg.com/357efe4293aa6e7e03b5d87481c64f3b_b.png" data-rawwidth="1772" data-rawheight="318" class="origin_image zh-lightbox-thumb" width="1772" data-original="https://pic4.zhimg.com/357efe4293aa6e7e03b5d87481c64f3b_r.png">
最后两个packet比较简单,android发送个FIN+ACK的包就断开链接了,server直接发送了一个RST包后也断开链接了。
Tcpdump的详细用法
1. TCPDump介绍
TcpDump能够将网络中传送的数据包的“头”彻底截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等 逻辑语句来帮助你去掉无用的信息。tcpdump就是一种免费的网络分析工具,尤为其提供了源代码,公开了接口,所以具有很强的可扩展性,对于网络维护和 入侵者都是很是有用的工具。tcpdump存在于基本的FreeBSD系统中,因为它须要将网络界面设置为混杂模式,普通用户不能正常执行,但具有 root权限的用户能够直接执行它来获取网络上的信息。所以系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其余计算机的安全存在威胁。
咱们用尽可能简单的话来定义tcpdump,就是:dump the traffice on anetwork.,根据使用者的定义对网络上的数据包进行截获的包分析工具。做为互联网上经典的的系统管理员必备工具,tcpdump以其强大的功能, 灵活的截取策略,成为每一个高级的系统管理员分析网络,排查问题等所必备的东西之一。tcpdump提供了源代码,公开了接口,所以具有很强的可扩展性,对 于网络维护和入侵者都是很是有用的工具。tcpdump存在于基本的FreeBSD系统中,因为它须要将网络界面设置为混杂模式,普通用户不能正常执行, 但具有root权限的用户能够直接执行它来获取网络上的信息。所以系统中存在网络分析工具主要不是对本机安全的威胁,而是对网络上的其余计算机的安全存在 威胁。
2. TcpDump的使用 普通状况下,直接启动tcpdump 将监视第一个网络界面上全部流过的数据包。 # tcpdump tcpdump : listening on fxp0 11:58:47.873028 202.102.245.40.netbios-ns > 202.102.245.127.netbios-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 tcpdump 支持至关多的不一样参数,如使用-i参数指定tcpdump 监听的网络界面 ,这在计算机具备多个网络界面时很是有用,使用-c参数指定要监听的数据包数量 ,使用-w参数指定将监听到的数据包写入文件中保存 ,等等。
然而更复杂的tcpdump 参数是用于过滤目的,这是由于网络中流量很大,若是不加分辨将全部的数据包都截留下来,数据量太大,反而不容易发现须要的数据包。使用这些参数定义的过滤规则能够截留特定的数据包,以缩小目标,才能更好的分析网络中存在的问题。tc pdump 使用参数指定要监视数据包的类型、地址、端口等 ,根据具体的网络问题,充分利用这些过滤规则就能达到迅速定位故障的目的。请使用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 截获数据并保存到文件中,而后再使用其余程序进行解码分析 。固然也应该定义过滤规则,以免捕获的数据包填满整个硬盘。FreeBSD提供的一个有效的解码程序为tcpshow ,它能够经过Packages Collection来安装。
# pkg_add /cdrom/packages/security/tcpshow* # tcpdump -c 3 -w tcpdump .outtcpdump : listening on fxp0 # tcpshow < tcpdump .out --------------------------------------------------------------------------- Packet 1 TIME:12:00:59.984829 LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026 <*** No decode support for encapsulated protocol ***> --------------------------------------------------------------------------- Packet 2 TIME:12:01:01.074513 (1.089684) LINK:00:A0:C9:AB:3C:DF -> FF:FF:FF:FF:FF:FF type=ARP ARP:htype=Ethernet ptype=IP hlen=6 plen=4 op=request sender-MAC-addr=00:A0:C9:AB:3C:DF sender-IP-address=202.102.245.3 target-MAC-addr=00:00:00:00:00:00 target-IP-address=202.102.245.3 --------------------------------------------------------------------------- Packet 3 TIME:12:01:01.985023 (0.910510) LINK:00:10:7B:08:3A:56 -> 01:80:C2:00:00:00 type=0026 <*** No decode support for encapsulated protocol ***>
tcpshow能以不一样方式对数据包进行解码,并以不一样的方式显示解码数据,使用者能够根据其手册来选择最合适的参数对截获的数据包进行分析。从上面的例子中能够看出,tcpshow支持的协议也并不丰富,对于它不支持的协议就没法进行解码。
除了tcpdump 之 外,FreeBSD的PackagesCollecion中还提供了Ethereal和Sniffit两个网络分析工具,以及其余一些基于网络分析方式的 安全工具。其中Ethereal运行在X Window 下,具备不错的图形界面,Sniffit使用字符窗口形式,一样也易于操做。然而因为tcpdump 对 过滤规则的支持能力更强大,所以系统管理员仍然更喜欢使用它。对于有经验的网络管理员,使用这些网络分析工具不但能用来了解网络究竟是如何运行的,故障出 如今何处,还能进行有效的统计工做,如那种协议产生的通讯量占主要地位,那个主机最繁忙,网络瓶颈位于何处等等问题。所以网络分析工具是用于网络管理的宝 贵系统工具。为了防止数据被滥用的网络分析工具截获,关键仍是要在网络的物理结构上解决。经常使用的方法是使用交换机或网桥将信任网络和不信任网络分隔开,可 以防止外部网段窃听内部数据传输,但仍然不能解决内部网络与外部网络相互通讯时的数据安全问题。若是没有足够的经费将网络上的共享集线器升级为以太网交换 机,可使用FreeBSD系统执行网桥任务。这须要使用option BRIDGE编译选项从新定制内核,此后使用bridge命令启动网桥功能。
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 的表达式介绍
http://anheng.com.cn/news/24/586.html 表达式是一个正则表达式,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.http://anheng.com.cn/news/24/586.html
第二种是肯定传输方向的关键字 ,主要包括src , dst ,dst or src, dst and src,这些关键字指明了传输的方向。举例说明,src 210.27.48.2 ,指明ip包中源地址是210.27.48.2 , dst net202.0.0.0 指明目的网络地址是202.0.0.0 。若是没有指明方向关键字,则缺省是src or dst关键字。
http://anheng.com.cn/news/24/586.html 第三种是协议的关键字 , 主要包括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
E 对本机的udp 123 端口进行监视 123 为ntp的服务端口
# tcpdump udp port 123
F 系统将只对名为hostname的主机的通讯数据包进行监视。主机名能够是本地主机,也能够是网络上的任何一台计算机。下面的命令能够读取主机hostname发送的全部数据:
#tcpdump -i eth0 src host hostname
G 下面的命令能够监视全部送到主机hostname的数据包:
#tcpdump -i eth0 dst host hostname
H 咱们还能够监视经过指定网关的数据包:
#tcpdump -i eth0 gateway Gatewayname
I 若是你还想监视编址到指定端口的TCP或UDP数据包,那么执行如下命令:
#tcpdump -i eth0 host hostname and port 80
J 若是想要获取主机210.27.48.1除了和主机210.27.48.2以外全部主机通讯的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
K 想要截获主机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 \)
L 若是想要获取主机210.27.48.1除了和主机210.27.48.2以外全部主机通讯的ip包,使用命令:
#tcpdump ip host 210.27.48.1 and ! 210.27.48.2
M 若是想要获取主机210.27.48.1接收或发出的telnet包,使用以下命令:
#tcpdump tcp port 23 host 210.27.48.1
(3). tcpdump 的输出结果介绍
http://anheng.com.cn/news/24/586.html 下面咱们介绍几种典型的tcpdump 命令的输出信息
A,数据链路层头信息 使用命令: #tcpdump --e host ice ice 是一台装有linux 的主机,她的MAC地址是0:90:27:58:AF:1A H219是一台装有SOLARIC的SUN工做站,它的MAC地址是8:0:20:79:5B:46;上一条命令的输出结果以下所示: 21:50:12.847509 eth0 < 8:0:20:79:5b:46 0:90:27:58:af:1a ip 60: h219.33357 > ice.telne t 0:0(0) ack 22535 win 8760 (DF)
分析:21:50:12是显示的时间, 847509是ID号,eth0 <表示从网络接口eth0 接受该数据包,eth0>表示从网络接口设备发送数据包, 8:0:20:79:5b:46是主机H219的MAC地址,它代表是从源地址H219发来的数据包.0:90:27:58:af:1a是主机ICE的 MAC地址,表示该数据包的目的地址是ICE . ip 是代表该数据包是IP数据包,60是数据包的长度, h219.33357 > ice.telnet代表该数据包是从主机H219的33357端口发往主机ICE的TELNET(23)端口. ack 22535代表对序列号是222535的包进行响应. win 8760代表发送窗口的大小是8760.
B,ARP包的TCPDUMP输出信息
使用命令:#tcpdump arp
获得的输出结果是: 22:32:42.802509 eth0 > arp who-has route tell ice (0:90:27:58:af:1a) 22:32:42.802902 eth0 < arp reply route is-at 0:90:27:12:10:66 (0:90:27:58:af:1a) 分 析: 22:32:42是时间戳, 802509是ID号, eth0 >代表从主机发出该数据包, arp代表是ARP请求包,who-has route tell ice代表是主机ICE请求主机ROUTE的MAC地址。0:90:27:58:af:1a是主机ICE的MAC地址。
C,TCP包的输出信息
用TCPDUMP捕获的TCP包的通常输出信息是:
src > dst: flags data-seqno ack window urgent options src> dst:代表从源地址到目的地址, flags是TCP包中的标志信息,S 是SYN标志, F (FIN), P (PUSH) , R(RST) "." (没有标记); data-seqno是数据包中的数据的顺序号, ack是下次指望的顺序号,window是接收缓存的窗口大小, urgent代表数据包中是否有紧急指针. Options是选项.
D,UDP包的输出信息
用TCPDUMP捕获的UDP包的通常输出信息是:
route.port1 > ice.port2: udp lenth UDP十分简单,上面的输出行代表从主机ROUTE的port1端口发出的一个UDP数据包到主机ICE的port2端口,类型是UDP, 包的长度是lenth
3. 辅助工具
(1) 想查看TCP或者UDP端口使用状况,使用 netstat -anp 若是有些进程看不见,如只显示”-”,能够尝试 sudo netstat -anp 若是想看某个端口的信息,使用lsof命令,如: sudo lsof -i :631
-bash-3.00# netstat -tln
netstat -tln 命令是用来查看linux的端口使用状况
/etc/init.d/vsftp start 是用来启动ftp端口~!
看文件/etc/services
netstat
查看已经链接的服务端口(ESTABLISHED)
netstat -a
查看全部的服务端口(LISTEN,ESTABLISHED)
sudo netstat -ap
查看全部 的服务端口并显示对应的服务程序名
nmap <扫描类型><扫描参数>
例如:
nmap localhost
nmap -p 1024-65535 localhost
nmap -PT 192.168.1.127-245
当咱们使用 netstat -apn 查看网络链接的时候,会发现不少相似下面的内容:
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 52 218.104.81.152:7710 211.100.39.250:29488 ESTABLISHED 6111/1
显示这台服务器开放了7710端口,那么 这个端口属于哪一个程序呢?咱们可使用 lsof -i :7710 命令来查询:
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
sshd 1990 root 3u IPv4 4836 TCP *:7710 (LISTEN)
这样,咱们就知道了7710端口是属于sshd程序的。
(2) 运行tcpdump命令出现错误信息排除
tcpdump: no suitable device foundtcpdump: no devices found /dev/bpf4: A file or directory in the path name does not exist. 解决方案 2种缘由:1.权限不够,通常不通过处理,只用root用户能使用tcpdump2.缺省只能同时使用4个tcpdump,如用完,则报此类错。须要停掉多余的tcpdump