您的位置:首页 > 理论基础 > 计算机网络

ping 原理与ICMP协议 && Android利用tcpdump和wireshark抓取网络数据包 && Android利用Fiddler进行网络数据抓包

2011-06-21 14:17 1286 查看
(1)ping 的原理

ping 程序是用来探测主机到主机之间是否可通信,如果不能ping到某台主机,表明不能和这台主机建立连接。ping 使用的是ICMP协议,它发送icmp回送请求消息给目的主机。ICMP协议规定:目的主机必须返回ICMP回送应答消息给源主机。如果源主机在一定时间内收到应答,则认为主机可达。ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。

(2)Ping工作过程

假定主机A的IP地址是192.168.1.1,主机B的IP地址是192.168.1.2,都在同一子网内,则当你在主机A上运行“Ping 192.168.1.2”后,都发生了些什么呢?

首先,Ping命令会构建一个固定格式的ICMP请求数据包,然后由ICMP协议将这个数据包连同地址“192.168.1.2”一起交给IP层协议,IP层协议将以地址“192.168.1.2”作为目的地址,本机IP地址作为源地址,加上一些其他的控制信息,构建一个IP数据包,并在一个映射表中查找出IP地址192.168.1.2所对应的物理地址(也叫MAC地址,熟悉网卡配置的朋友不会陌生,这是数据链路层协议构建数据链路层的传输单元——帧所必需的),一并交给数据链路层。后者构建一个数据帧,目的地址是IP层传过来的物理地址,源地址则是本机的物理地址,还要附加上一些控制信息,依据以太网的介质访问规则,将它们传送出去。

其中映射表由ARP实现。ARP(Address Resolution Protocol)是地址解析协议,是一种将IP地址转化成物理地址的协议。ARP具体说来就是将网络层(IP层,也就是相当于OSI的第三层)地址解析为数据连接层(MAC层,也就是相当于OSI的第二层)的MAC地址。

主机B收到这个数据帧后,先检查它的目的地址,并和本机的物理地址对比,如符合,则接收;否则丢弃。接收后检查该数据帧,将IP数据包从帧中提取出来,交给本机的IP层协议。同样,IP层检查后,将有用的信息提取后交给ICMP协议,后者处理后,马上构建一个ICMP应答包,发送给主机A,其过程和主机A发送ICMP请求包到主机B一模一样。即先由IP地址,在网络层传输,然后再根据mac地址由数据链路层传送到目的主机。

(3)IMCP协议介绍

前面讲到了,IP协议并不是一个可靠的协议,它不保证数据被送达,那么自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

当传送IP数据包发生错误,比如主机不可达、路由不可达等等,ICMP协议将会把错误信息封包,然后传送回来给主机。这样给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。ICMP数据包由8bit的错误类型和8bit的代码和16bit的校验和组成。而前16bit就组成了ICMP所要传递的信息。

尽管在大多数情况下,错误的包传送应该给出ICMP报文,但是在特殊情况下,是不产生ICMP错误报文的。如下:

A,ICMP差错报文不会产生ICMP差错报文(防止IMCP的无限产生和传送)

B,源地址不是单个主机的数据报。这就是说,源地址不能为零地址、环回地址、广播地 址或多播地址。

ICMP协议大致分为两类,一种是查询报文,一种是差错报文。其中查询报文有以下几种用途:

A,ping查询

B,子网掩码查询(用于无盘工作站在初始化自身的时候初始化子网掩码)

C,时间戳查询(可以用来同步时间)

而差错报文则产生在数据传送发生错误的时候,就不赘述了。

==========================================================================================

主要介绍如何利用tcpdump抓取andorid手机上网络数据请求,利用Wireshark可以清晰的查看到网络请求的各个过程包括三次握手。

(1)下载并安装tcpdump,下载地址https://raw.githubusercontent.com/Trinea/trinea-download/master/tcpdump,然后安装,前提是root机型。

adb push "C:\Users\zhangcheng\Desktop\tcpdump" /system/bin

(2)启动并运行tcpdump

root@android:/system/bin # tcpdump -n -s 0。这时在手机上做任何涉及到网络的操作都会在屏幕上打印出来,可以通过ctrl+c停止。

istening on wlan0, link-type EN10MB (Ethernet), capture size 65535 bytes

14:59:23.860653 IP 192.168.1.100.49417 > 239.255.255.250.1900: UDP, length 123

14:59:25.496472 IP 192.168.1.104.43056 > 216.58.221.100.443: . ack 59201845 win 29200

14:59:26.833782 IP 192.168.1.100.49417 > 239.255.255.250.1900: UDP, length 125

14:59:26.834769 IP 192.168.1.100.49417 > 239.255.255.250.1900: UDP, length 123

14:59:28.719620 IP 211.162.127.93.80 > 192.168.1.104.55841: F 1444768075:1444768075(0) ack 839979193 win 123

由于命令行最大输出的限制及屏幕不断滚动,查看不方便,我们可以将抓取的网络包保存到sd卡,如下命令:

root@android:/system/bin # tcpdump -i any -p -s 0 -w /sdcard/netCapture.pcap,操作完毕后,将netCapture.pcap拷贝到PC上用wireshark分析。

(3)利用wireshark分析包数据

用wireshark打开netCapture.pcap即可分析log。分析过程参见http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html,核心部分是





以及TCP三次握手的解析过程。

===========================================================================================================

主要介绍Android及IPhone手机上如何进行网络数据抓包,比如我们想抓某个应用(微博、微信、墨迹天气)的网络通信请求就可以利用这个方法。

Fiddler是强大且好用的Web调试工具之一,它能记录客户端和服务器的http和https请求,允许你监视,设置断点,甚至修改输入输出数据,Fiddler包含了一个强大的基于事件脚本的子系统,并且能使用.net语言进行扩展,在web开发和调优中经常配合firebug使用。

Fiddler的运行机制其实就是本机上监听8888端口的HTTP代理。 对于PC端Fiddler启动的时候默认IE的代理设为了127.0.0.1:8888,而其他浏览器是需要手动设置的,所以如果需要监听PC端Chrome网络请求,将其代理改为127.0.0.1:8888就可以监听数据了,手机端按照下面的设置即可完成整个系统的http代理。

详细使用参见http://www.oschina.net/question/221817_129716,实验结果如下,显示监听到手机流量信息。





停止网络监控的话去掉wifi的代理设置即可,否则Fiddler退出后手机就上不网了哦。 如果需要恢复手机无密码状态,Android端之后可以通过系统设置-安全-受信任的凭据-用户,点击证书进行删除或清除凭据删除所有用户证书,再设置密码为无。



参考原文:http://blog.csdn.net/inject2006/archive/2008/03/02/2139149.aspx

参考原文:http://www.trinea.cn/android/tcpdump_wireshark/
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: