导航:首页 > 操作系统 > android网络数据抓包

android网络数据抓包

发布时间:2023-05-04 00:54:40

Ⅰ 如何在 android 手机上实现抓包

千锋扣丁学堂Android开发为您解答:
tcpmp是最快捷方便的抓包方式,还可以加深对网络协议的理解。android下可以通过如下方式抓包:

1 Android上启动tcpmp

Android设备可以把tcpmp的可执行文件上传到android设备上,然后通过mac远程登录android设备运行tcpmp,前提是这台android设备必须已经root过。步骤如下:

下载android版本的tcpmp为android系统编译的tcpmp版本。

通过adb将tcpmp上传到android设备

通过adb push将tcpmp文件上传到特定的目录,这里我们选择/sdcard/data目录。

在android设备上运行tcpmp

通过adb shell登陆设备,并执行tcpmp,最后一步执行./tcpmp即可。

2. 分析tcpmp输出

经过上面的步骤成功运行tcpmp之后,接下来就可以分析输出的网络包内容了,iOS设备和Android设备的输出是一致的。我们先来解析下几个基本的格式:

图中红色方框内的部分是一个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,然后怎么在网络上稳定可靠的传输,要有个基本的印象。下面我们再看下tcpmp更多的功能,这些功能都是基于对tcp/ip协议的理解,遇到不理解的建议多google下相关的技术概念。

3. tcpmp知识拓展

再继续深入tcpmp之前,先贴上一张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 Reced)为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,我可以将就下。我们在使用tcpmp的时候会经常看到这几个flag,[S],[P],[R],[F],[.]。其他几个都好理解,[.]特殊点,是个占位符,没有其他flag被设置的时候就显示这个占位符,一般表示ack。

3.2 tcpmp 更多使用参数

这部分我们来看下tcpmp常用的一些命令参数。文章最开始部分的tcpmp命令是这样的:sudo tcpmp -i rvi0 -AAl。
-i rvi0 -AAl都是属于参数部分。常见的有这些:

-i, 要监听的网卡名称,-i rvi0监听虚拟网卡。不设置的时候默认监听所有网卡流量。

-A, 用ASCII码展示所截取的流量,一般用于网页或者app里http请求。-AA可以获取更多的信息。

-X,用ASCII码和hex来展示包的内容,和上面的-A比较像。-XX可以展示更多的信息(比如link layer的header)。

-n,不解析hostname,tcpmp会优先暂时主机的名字。-nn则不展示主机名和端口名(比如443端口会被展示成https)。

-s,截取的包字节长度,默认情况下tcpmp会展示96字节的长度,要获取完整的长度可以用-s0或者-s1600。

-c,只截取指定数目的包,然后退出。

-v,展示更多的有用信息,还可以用-vv -vvv增加信息的展示量。

src,指明ip包的发送方地址。

dst,指明ip包的接收方地址。

port,指明tcp包发送方或者接收方的端口号。

and,or,not,操作法,字面意思。

上面几个是我个人比较常用的,更多的参数可以参考这个详细文档。有兴趣的可以分析下面几个例子练习下:

tcpmp ‘tcp[13] & 16!=0’

tcpmp src port 80 and tcp

tcpmp -vv src and not dst port 23

tcpmp -nnvvS src 192.0.1.100 and dst port 443

4. 用tcpmp分析http完整请求

说了这么多,我们再来实战下,看一个完整的http请求流程。sudo tcpmp -i rvi0 -AAl src 60.28.215.123 or
dst 60.28.215.123

列出了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就不仔细分析了,最后再看下请求完成的最后几个包:

最后两个packet比较简单,android发送个FIN+ACK的包就断开连接了,server直接发送了一个RST包后也断开连接了。

Ⅱ 如何在 Android 手机上实现抓包

先给手机刷root权顷虚限,执行命令:
adb root
adb remount
ok后:把tcpmp放到c盘根目录下:C:\
2. 执行命令:
adb push c:/tcpmp /data/local/雀轮燃tcpmp
(这个桐缓命令是把tcpmp拷到手机中去 )
3. adb shell chmod 6755 /data/local/tcpmp
是给tcp分配权限
4. adb shell
/data/local/tcpmp -p -vv -s 0 -w /sdcard/capture.pcap
输入 这个命令就等于启动了抓包工具
5. 要停止抓包就Ctrl+C
6. sdcard的capture.pcap复制出来到电脑上用wireshark打开即可
以后每次抓包只要重复第4、5、6步即可。

Ⅲ 怎样对Android设备进行网络抓包

前段时间自己的app访问服务器的url总是会出现间接性失败的问题,于是和服务器的同事开了个会,提出了他们服务器存在的这个bug,我的同事自然雀拆说自己的服务器没问题,然后要我重现bug然后顷含枣提供抓包给他分老码析。所以我自己去折腾了各种网络抓包的方法,下面介绍一种实际可行的对android设备抓包的方法。

解决方案:
利用tcpmp对android设备进行抓包,用wireshark进行抓包分析。在进行抓包之前,需要将设备进行root,推荐是用root工具king root,成功率较高。
http://blog.csdn.net/u013136708/article/details/50610955

Ⅳ 如何通过使用fiddler对Android系统设备抓包总结

1. 通过fiddler抓包真机
好处是安卓手机不用root,简单设置代理,并可以在电脑端检测抓包数据。只能抓获wifi,不同抓包3g/2g运营商的数据
2. 通过tcpudmp工具抓包
可以检测真机,也可以模拟器。可以wifi,也可以3g/2g
必须root,可以安装在手机内,然后电脑端开启检测或者停止检测,抓到的数据包*.cab再拷贝到电脑,通过用Wireshark分析数据包。

Ⅳ 如何在 Android 手机上实现抓包

Android系统手机端抓包方法有如下:一、抓包准备
1. Android手机需要先获得root权限。一种是否获得root权限的检验方法:安装并打开终端模拟器(可通过安卓市场等渠道获得)。在终端模拟器界面输入su并回车,若报错则说明未root,若命令提示符从$变#则为rooted。
2. 如果Android手机尚未root,可通过superoneclick或其它方法进行root处理(需要先安装Microsoft .NET Framework)。
3. 需要先获得 Android SDK,Android的开发环境高改肆。
4. 需要获得tcpmp软件。

二、抓包步骤
1. 将Android手机与电脑USB相连,打开windows命令提示符窗口。
2. 将tcpmp程序至android手戚轿机(该命令前面那个目录文件为本地地址,后面那个目录为目的手机端地址)。C:\android-sdk-windows\platform-tools>adb push c:/tcpmp /data/local/tcpmp
3. 修改tcpmp的权限。C:\android-sdk-windows\platform-tools>adb shell #chmod 777 /data/local/tcpmp
4. 进入root权限 C:\android-sdk-windows\platform-tools>adb shell,执行$ su ,在运行su指令后,手机终端桌面会出现相应提示信息以确认您对root操作的认可。
5. 运行tcpmp,输入以下命令启动抓包。/data/local/tcpmp -p -vv -s 0 -w /sdcard/capture.pcap。
6. 在手机端执行相应需要进行抓包分析的操作,执行完成后在命令提示符窗口执行Ctrl+C中断抓包进程。
7. 将抓包结果复制至本地(前面歼扒那个目录为手机端地址,后面那个目录为本地地址),C:\android-sdk-windows\platform-tools>adb pull /sdcard/capture.pcap c:/
8. 使用Wireshark等工具查看抓包文件capture.pcap。

Ⅵ 如何对Android设备进行网络抓包

方法/步骤

启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框。

在Fiddler Options”对话框切换到“Connections”选项卡,然后勾选“Allow romote computers to connect”后面的复选框,然后点击“OK”拿腊或按钮。

在本机命令行输入:ipconfig,找到本机的ip地址。

打开android设备的“设置”->“WLAN”,找到要连接的网络,在上面长按,然后选择“修改网络局判”,弹出网络设置对消伍话框,然后勾选“显示高级选项”。

在“代理”后面的输入框选择“手动”,在“代理服务器主机名”后面的输入框输入电脑的ip地址,在“代理服务器端口”后面的输入框输入8888,然后点击“保存”按钮。

然后启动android设备中的浏览器,访问网络的首页,在fiddler中可以看到完成的请求和响应数据。

Ⅶ Android如何利用VpnService来抓包

通过这张图可以看出在未使用VpnService的情况下,App会走系统网络来进行各种网络通信。而在使用VpnService的情况下,IP层网络通信传输的包将经由本地的虚拟通道交由VpnService来处理,这样一来我们便可以捕获这些数据从而达到抓包的目的。

至今还没有完全理解这个API的意义。按照google的文档来说就是:

看起来像是添加一个虚拟IP地址的意思,然而按照教程中的描述则为:

参数变成了子网掩码,但是按照实际的使用来看更偏向于第一种。

添加路由来过滤发送特定IP地址的流量,如果不进行任何过滤则需要设置为0.0.0.0/0或::/0

添加DNS服务器的地址,如果不添加的话将使用手机默认的DNS服务器。

添加白名单,白名单中的app的流量将不会经过vpn虚拟通道而直接走系统网络。

设置是否为阻塞模式,默认为非阻塞。个人感觉很重要的API,github上的很多项目没有设置为阻塞导致具体实现的时候用的都是线程轮询的方式,这一样一来大大提升了系统的开销。设置为阻塞模式后将大大减少进程上下文的切换。

设置虚拟通道的最大传输字节数,需要根据具体情况具体分析。在抓包的场景下最好尽可能得设置大一些。

简单来说是否允许一些app在使用一些非主流的方式访问网络的情况下不走虚拟通道。个人觉得最好允许。

VpnService启动后创建Builder进行各种初始化,结束后调用establish()获得本地虚拟通道的文件描述符(mFD)。通过输入流读取需要发送IP数据包后解析包的解析(网上有各种第三方的库可供选择)。首先判断是版本是IPV4还是IPV6,之后根据不同的版本来判断使用的是什么协议。
实际抓包的时候可以看到很多协议种类,当然主要的还是UDP与TCP。

可以创建一个稀疏数组,key为源端口,value为Datagram通道,通过Datagram通道向外发送UDP数据,从而减少系统开销。最终通过Datagram通道拿到UDP响应数据后写入mFD的输出流。

TCP的情况比较麻烦,涉及到三次握手以及四次分手,在github上看到个人感觉比较好的做法是,本地建立一个代理服务器来模拟这个过程。这个还需要深入研究。

套接字在发送之前一定要调用protect来防止循环链接,否则发出去的包又回回到mFD的输入流造成死循环。

另外mFD如果不关闭的话是没办法停止VpnService的。

Ⅷ Android 配置Fiddler抓包

将浏览器的代理设置成Fiddler能够实现Fiddler抓取浏览器的请求。同理,Android手机配置Fiddler作为代理服务器,从而让Fiddler能够截获Android的流量来实现抓包。

可以通过ipconfig命令等查看,最简单的就是将鼠标移到Fiddler窗口右上角的online字样上面,会自动提示当前电脑IP地址。

比如,我当前PC IP地址为172.20.224.63

打开Fiddler上Tools-->Options,选择Connections选项卡,可以查看到代理端口地址。默认为8888。你可以自行配置成其他端口号。

还有,请勾选“Allow remote computers to connect”(这是允许Android手机通过代理进行网络访问)。

手机连接和PC位于同一局域网的wifi,连接成功后,进入到高级选项中。(不同手机有不同的进入方法,早期手机是长按已经连接上的wifi,现在有些手机直接提供了进入配置的箭头按钮。)
将代理服务器主机名修改为第一步获取的IP地址,端口号为第一步获取的端口号。然后保存。

以上配置OK,打开手机进行网络访问吧,看看Fiddler上有没有HTTP请求包。

实际测试,如果发现没有数据包,你需要检查Fiddler是否打开,是否允许远程电脑访问,以及端口号和IP地址是否配置正确,然后重启试试看(重启Fidder、手机重连Wifi,重新配置等)。

以上配置的仅仅是抓取HTTP请求,对于HTTPS请求,你还是看不到。下面介绍下,HTTPS抓包配置。

HTTPS也是需要通过Fiddler代理来抓取的,所以呢,前面的配置代理的过程不变。下面介绍其他涉及到证书安装方面的。

打开Tools->Options,选择HTTPS选项卡,按照下图进行勾选。

PC上安装好了根证书之后,还需要在手机上安装根证书,才能保证Fiddller能够正确解析出HTTPS包。(原理是,手机通过Fiddler做了代理后,HTTPS请求进行握手时候获取的证书就是Fiddler自己生成的证书,这个证书在手机上默认不受信任,这样会导致手机端认为服务端非法从而断开HTTPS握手,导致请求失败。所以,我们需要让手机信任Fiddler的根证书。)

手机在配置好HTTP代理后,打开浏览器,输入: http://ipv4.fiddler:8888/ 。实际上 ipv4.fiddler 会引导到Fiddler所在PC的IP地址上。所以,你输入http://<pc ip>:<port>也是可以的。(题外话, ipv4.fiddler 这个域名不是外网通用域名,你知道为啥会正确解析不?猜想是Fiddler自己提供了本地DNS解析服务)

OK,以上是所有的配置。

配置成功后,观察Fiddler,手机进行一些操作,看看HTTPS的请求能解析不。如果你遇到下面的异常:

很大可能是由于手机上没有安装Fiddler的根证书。当然,还有例外,如果手机Android系统为7.0以上,即便安装了Fiddler的根证书,也会出现这个异常。原因请参考 https://www.jianshu.com/p/0711ca1121e9

Ⅸ 使用Charles对Android 进行HTTP抓包

 官方介绍:Charles让开发者能够直观地浏览机器客户端和互联网之间的通信数据,包括客户端发送的请求数据、服务端返回的响应数据以及HTTP头部。

 除了官方介绍,对于孝握李Android开发来说,Charles还皮滚有一个非常实用的功能。巧迟Charles能将某个接口的服务端响应数据保存到本地电脑上,然后将请求映射到本地,下次再请求这个接口时,手机端收到的response就是已经保存在本地的数据。而我们可以随意修改本地数据,也就是说,可以让客户端接收到任意我们想给的数据。

配置好网络代理才能让手机端的请求被Charles捕获到。

 配置好了之后,就能在Charles看到手机端与服务器之间的数据交互了。在Request中能看到手机端发送的请求数据,在Response中能看到服务端返回给手机的数据。

也就是上面说的请求映射,使用方法:

 然后,下次手机再请求这个接口时,返回的就是本地Response里的数据了。这时候就可以愉快地修改本地Response数据,想要返回什么数据就有什么数据。

Ⅹ Android逆向之http/https网络抓包

用于android app的http/https网络抓包的主要有以下三个工具

由于这个知识点网上的资料比较多,我就不重复迅圆塌造车了,charles和burpsuite在linux下用,windows下推荐亩圆使用fiddler,功能比较强大,写的比较好的文章:
fiddler Android下https抓包全腔迅攻略

另外的方法可见:
http://blog.dornea.nu/2015/02/20/android-remote-sniffing-using-tcpmp-nc-and-wireshark/

阅读全文

与android网络数据抓包相关的资料

热点内容
java修改ip 浏览:149
php不需要编译吗 浏览:134
特斯拉新车如何用app控制 浏览:185
文档拖到文件夹就不见了 浏览:814
标致308压缩比是多少 浏览:749
服务器和备用服务器地址 浏览:926
程序员加班跳槽 浏览:706
青年员工在工作中如何化解压力 浏览:602
包子解压神器怎么玩才爽 浏览:733
联想加密电脑怎么做系统 浏览:881
解压最近的压力 浏览:709
如何知道王牌战争新出来的服务器 浏览:591
程序员建的房子 浏览:419
navicatlinux破解版 浏览:454
找个辅警或者程序员 浏览:452
军团td预言命令 浏览:114
营指挥员下达作战命令 浏览:258
exe打开指定文件夹 浏览:265
pdf里面怎么去水印 浏览:845
appleid账号加密码 浏览:222