关于抓包过滤:移动开发手机抓包

在挪动利用开发过程中,咱们会应用Charles和Fiddler进行抓包。通常要抓取HTTPS加密的数据包,个别应用Charles或者Fiddler4代理HTTP申请,配置证书信赖后,便可拿到明文报文。然而因为Charles证书和Fiddler证书并非证书机构颁发的指标站点的非法证书,所以会不被信赖。要解决这个问题,咱们须要应用到Xposed+JustTrustMe工具来敞开SSL验证。 一、 Charles应用1.1 配置Charles关上Charles,而后点击【Proxy】 -->勾销勾选 【windows proxy 】,如下图。 1.2 代理https并增加证书点击【Proxy】-->【SSL Proxy Settings】弹出SSL代理设置界面 。而后,选中【Client Certificates】增加域名的证书,如下图。而后,抉择 【Help】--> 【ssl proxy 】->【 Install Charles Root Certificate】,装置实现之后,再抉择【Install Charles Root Certificate on a Moblie Device or Remote Browser】,如下图所示。接下来,关上手机中的wifi设置,将电脑和手机连贯在同一个wifi环境下,在手机端中批改以后wifi设置,将代理抉择手动,服务器主机名填入域名,服务器端口输出8888即可。而后,关上浏览器输出【chls.pro/ssl】回车会进入charles证书下载,加载之后是一个.pem文件,须要重命名更成成.crt后缀,这是手机端的证书安装包,间接关上装置即可. 失常来说,步骤到这就算实现了。然而如果手机是安卓7当前的版本,就会失败 始终是“unknow”,这是因为应用程序不再信赖用户或管理员增加的CA用于平安连贯。对于这种问题,咱们须要在Android应用程序中增加ssl信赖配置。关上Android利用的Mainfest.xml文件,增加如下内容。 <application ... android:networkSecurityConfig="@xml/network_security_config" >而后,新建network_security_config.xml文件,增加如下脚本。 <?xml version="1.0" encoding="utf-8"?><network-security-config> <base-config cleartextTrafficPermitted="true" /> <domain-config> <domain includeSubdomains="true">api.xj.mydeertrip.com</domain>//须要抓包的域名 <trust-anchors> <certificates src="@raw/charles"/>//手机中下载的.pem格局证书文件 名称 </trust-anchors> </domain-config></network-security-config>其中,charles是.pem文件名,就是手机中下载的.pem证书文件放入工程的res/raw文件夹中即可。 如何配置Https,能够参考Charles 如何抓取https数据包 二、 Burp Suite2.1 装置Burp Suite2.1.1 下载Burp Suite如果还没有下载Burp Suite,能够应用上面的地址下载Burp Suite下载链接。而后,咱们下载macOS Burpsuite注册机,解压注册机和汉化包,在终端中关上 BP 程序内置的 JAVA 文件门路。 cd /Applications/Burp\ Suite\ Professional.app/Contents/java/app && open .而后,将咱们下载的macOS Burpsuite.zip的解压内容拷贝进去,如下图所示。 ...

January 25, 2021 · 1 min · jiezi

关于抓包过滤:安卓手机安装Charles证书后抓取的请求依然为unknown

安卓7.0有平安爱护,用户级别的证书在大部分app中无奈通过验证。(charles装置的证书就是用户级别的) 解决方案: 用一个安卓版本7.0以下的手机。获取手机root权限,将证书增加到零碎级别中。点击查看解决方案应用iphone,ipad操作。ps:当初的手机取得root权限比拟难。 参考资料:https://blog.csdn.net/weixin_41508948/article/details/81908887?utm_medium=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-BlogCommendFromMachineLearnPai2-1.none

January 21, 2021 · 1 min · jiezi

关于抓包过滤:Charles-windows10-配置HTTPS抓包证书配置问题

如果曾经装置证书 cmd下执行 certmgr.msc能够看到以后所有的证书 看是否装置到这个文件夹下如果没有,装置时记得抉择: 装置到这个地位

November 3, 2020 · 1 min · jiezi

安卓70及以上版本抓包https失败解决方法

现象android7.0以上的手机https抓包失败(安装了https证书也不行) 原因android7.0+的版本新增了证书验证(系统证书) 解决办法前提:在手机端和电脑端都必须安装https的安全证书配置:打测试包时,项目设置默认信任所有证书(系统+用户)1.在工程res-xml目录中创建一个名为 network_security_config.xml的文件,文件内容如下: <network-security-config> <base-config cleartextTrafficPermitted="true"> <trust-anchors> <certificates src="system" overridePins="true" /> <certificates src="user" overridePins="true" /> </trust-anchors> </base-config></network-security-config>2.在AndroidManifest里的<application>标签中,添加如下代码: android:networkSecurityConfig="@xml/network_security_config"重新打包项目,然后抓包,即可成功。 webview抓包失败上面可以解决android原生抓包问题,但在android7.0以上的手机,开着网络代理访问不了webview,若要抓包webview,需要在webview的WebViewClient中,将一行代码给注释掉: super.onReceivedSslError(view, handler, error)这样是为了忽略掉SSL证书错误,因为开启代理后网络会变得不安全,证书会报错误,webview检测到证书错误之后就不请求任何数据。 注释是为了忽略掉父类的处理,默认执行下去。 警告这样的配置操作是敏感且危险的,只能用于测试环境方便抓包,线上包一定注意要恢复配置。后记通过查找资料,还有一个方法,通过重载WebViewClient的onReceivedSslError()函数并在其中执行handler.proceed(),即可忽略SSL证书错误,继续加载页面,代码如下: WebView webview = (WebView) findViewById(R.id.webview);webview.setWebViewClient(new WebViewClient() { @Override public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { // 不要调用super.onReceivedSslError,因为其包含了一条 handler.cancel(),第一次访问时无法加载,第二次以后可以加载 // super.onReceivedSslError(view, handler, error); // 忽略SSL证书错误,继续加载页面 handler.proceed(); }}

July 3, 2020 · 1 min · jiezi

安卓手机微信7.0.4调试小程序抓包https请求失败的问题和解决

注意:阅读本文需要一台已经root的安卓手机!说明系统:MacOS 10.13.6手机:小米6(已root)抓包工具:Charles微信版本:7.0.4现象安卓手机无法通过Charles代理抓包https请求,我前天(2019年04月16日)用的7.0.3不知道为什么能抓到,昨天手残更新到7.0.4就不行了。而iOS(iPhone5S 12.1.4)没有问题。查找相关资料,都说微信升级到版本7之后就限制了用户证书凭据。根据网上较多的推荐方案,建议把证书放在系统证书存放目录下,那这就需要Root手机了,如果没有,以下内容不适合阅读。接下来,我尝试将Charles生成的证书放在手机的系统证书中,并没有那么顺利,很失败!我慢慢来讲解一下。步骤生成Charles证书我们要生成一个可以存放在系统证书目录下的可被识别的证书。手机代理设置好了后,手机访问:<chls.pro/ssl>下载下来证书,名称是这样的charles-proxy-ssl-proxying-certificate.pem(你把这个文件搞到电脑上,假设该证书存在电脑的路径:~/charles-proxy-ssl-proxying-certificate.pem)。在你的电脑终端通过这个命令生成一个hash值:openssl x509 -subject_hash_old -in ~/charles-proxy-ssl-proxying-certificate.pem可以看到输出了类似如下P750TM:webs whidy$ openssl x509 -subject_hash_old -in ~/certificate.pem 07e87b3d—–BEGIN CERTIFICATE—–MIIFYjCCBEqgAwIBAgIGAWeQpfWHMA…….77JclxPc0UdJHi5rOf7w+LU8YZFPdMTLa/c2JjMlspt08UeQVDE=—–END CERTIFICATE—–将证书更名07e87b3d.0注意后缀!接下来你可以用任意手段将该文件拷贝至手机的/system/etc/security/cacerts/目录,如果成功则再次尝试抓包,如果失败,请继续看。超级终端操作如果不嫌麻烦的话,你完全可以在安卓手机上面的超级终端(自行下载的工具)进行以下操作,但是我没有这样,我在MacOSX中启用adb连接操作手机,如果你正有此意,请按照我的方式操作。电脑终端执行以下命令(这里不介绍brew,不理解的自行学习)brew cask install android-platform-tools装好后,数据线连上手机,测试一下adb devices没报错,且大概出现以下信息则正常:List of devices attached* daemon not running; starting now at tcp:5037* daemon started successfullyfa8a05fd device然后获取root权限,尝试将文件07e87b3d.0拷贝到/system/etc/security/cacerts/adb root获得权限后,直接执行下面命令将证书放入系统目录。push ~/07e87b3d.0 /system/etc/security/cacerts/如果成功了,请尝试抓包。如果提示失败,比如权限不足,只读啥的,反正大概错误信息如下:P750TM:/ whidy$ adb push ~/07e87b3d.0 /system/etc/security/cacerts/adb: error: failed to copy ‘/Users/whidy/07e87b3d.0’ to ‘/system/etc/security/cacerts/07e87b3d.0’: remote couldn’t create file: Read-only file system/Users/whidy/07e87b3d.0: 0 files pushed. 0.0 MB/s (1947 bytes in 0.119s)那就要继续折腾了。网上抄到的chmod 777目前是不管用的。要通过mount的相关操作来解决这个问题。装载可写的system目录查看当前system目录挂载在哪里mount,可以得到大致如下:rootfs on / type rootfs (ro,seclabel,size=2828452k,nr_inodes=707113)tmpfs on /dev type tmpfs (rw,seclabel,nosuid,relatime,size=2912600k,nr_inodes=728150,mode=755)devpts on /dev/pts type devpts (rw,seclabel,relatime,mode=600)proc on /proc type proc (rw,relatime,gid=3009,hidepid=2)sysfs on /sys type sysfs (rw,seclabel,relatime)selinuxfs on /sys/fs/selinux type selinuxfs (rw,relatime)/dev/block/dm-0 on /system type ext4 (ro,seclabel,relatime,discard,data=ordered)debugfs on /sys/kernel/debug type debugfs (rw,seclabel,relatime)none on /acct type cgroup (rw,relatime,cpuacct)none on /dev/stune type cgroup (rw,relatime,schedtune)tmpfs on /mnt type tmpfs (rw,seclabel,relatime,size=2912600k,nr_inodes=728150,mode=755,gid=1000)none on /config type configfs (rw,relatime)none on /dev/memcg type cgroup (rw,relatime,memory)注意到/dev/block/dm-0 on /system type ext4 (ro,seclabel,relatime,discard,data=ordered)这一行,后面括号有个ro,代表readonly!接下来尝试修改为可写(rw)状态:mount -o rw,remount /dev/block/dm-0 /system如果成功了,就试试将文件拷贝进去,失败了,例如提示:’/dev/block/dm-0’ is read-only,请继续阅读。这里参考Android O, failed to mount /system, /dev/block/dm-0 is read only,一顿操作!我这边是这样的:adb disable-verityadb reboot关闭验证是要重启设备的。执行重启后,继续:adb rootadb remountadb shell再执行mount发现结果跟刚才不一样了,找到有system的那一行发现这样的/dev/block/sde43 on /system type ext4 (rw,seclabel,relatime,discard,data=ordered)已经可写了,我试试拷贝进去。执行adb push /07e87b3d.0 /system/etc/security/cacerts/,出现以下结果:P750TM:/ whidy$ adb push /07e87b3d.0 /system/etc/security/cacerts//Users/whidy/07e87b3d.0: 1 file pushed. 0.1 MB/s (1947 bytes in 0.022s)应该就完成了。再去我的小米6手机里面的设置 > 更多设置 > 系统安全 > 加密与凭据 > 信任的凭据 > 系统里面看看,滚到最低部,ok,证书导入成功了。再去抓包看看我这文章是边写边记录的,现在可以看到https请求的抓包已经Ok啦最后我建议最后还原之前操作的disable-verity,这样操作一下:adb rootadb enable-verityadb reboot行了差不多就这些了。 ...

April 18, 2019 · 1 min · jiezi

网络分析利器wireshark命令版:tshark使用示例(2)

tshark是wireshark网络分析工具下的一个分支,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump难以胜任的场景中。本系列文章将整理介绍tshark相关内容。基本用法常用命令查看tshark版本tshark -v列出当前存在的网络接口tshark -D网卡描述依据OS有不同的编号方式,在不了解网络设备及编号情况下,一般先用“tshark -D”查看网络接口的编号以供-i参数使用。注: linux可以结合ifconfig命令查看tshark对指定网卡监听,抓包sudo tshark -i <interface>抓取网卡eth0的流量并写入capture123.pcaptshark -i eth0 -w capture123.pcap读取之前的文件capture123.pcaptshark -i eth0 -r capture123.pcap抓取网卡eth0的流量10分钟tshark -i eth0 -a duration:600注: 默认时间单位为秒抓取网卡eth0的10000个数据包tshark -c 10000 -i eth0抓取网卡eth0涉及192.168.1.1的流量报文tshark -i eth0 -f “host 192.168.1.1”注: 与wireshark、tcpdump一致,均使用BPF过滤表达式抓取网卡eth0指定协议的流量报文tshark -i eth0 -f “<协议名>”协议名可以为: tcp, udp, dns, icmp, http等案例实时打印当前mysql查询语句tshark -s 512 -i eth1 -n -f ’tcp dst port 3306’ -R ‘mysql.query’ -T fields -e mysql.query说明:-s 512 :只抓取前512个字节数据-i eth0 :监听eth0网卡-n :禁止域名解析-f ‘tcp dst port 3306’ :只捕捉协议为tcp,目的端口为3306的数据包-R ‘mysql.query’ :过滤出mysql.query查询语句的报文-T fields -e mysql.query :打印mysql查询语句实时打印当前http请求的url(包括域名)tshark -s 512 -i eth1 -n -f ’tcp dst port 8000’ -R ‘http.host and http.request.uri’ -T fields -e http.host -e http.request.uri -l | tr -d ’t’说明:-s 512 :只抓取前512个字节数据-i eth1 :监听eth1网卡-n :禁止网络对象名称解析-f ‘tcp dst port 8000’ :只捕捉协议为tcp,目的端口为8000的数据包-R ‘http.host and http.request.uri’ :过滤出http.host和http.request.uri-T fields -e http.host -e http.request.uri :打印http.host和http.request.uri-l :输出到标准输出读取之前抓包文件进行报文数据分析需要从抓包的文件evidence04.pcap中提取出报文相关数据信息,如时间、源IP、目的IP、协议名、源Port、標Port、包大小等信息,最后输出到csv文件。tshark -r evidence.pcap -T fields -e frame.time_relative -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e frame.len -E header=n -E separator=, -E quote=n -E occurrence=f > output.csv说明:-r evidence.pcap 需要分析的报文记录文件(pcap格式)-T fields 输出格式,选fields按字段,也可以选json等其他格式,需结合-e 及 -E使用-e frame.time_relative 取出封包的相对时间-e ip.src 提取源IP-e ip.dst 提取目的IP-e ip.proto 提取协议名-e tcp.srcport 提取源Port-e tcp.dstport 提取目的Port-e frame.len 提取数据帧大小-E header=n 是否输出字段名称(cvs的第1行)-E separator=, 指定分割符,/t是tab,/s是一格空格-E quote=n 指定是否对字段用引号,d是双引号,s是单引号,n是不用-E occurrence=f 多值时是否保留,f是第一个值,l是最后一个值,a是所有值都列出,默认全部output.csv 输出文件路径及名称DNS报文过滤使用tshark过滤dns cap包中源ip、目的ip、request请求tshark -r test.cap -T fields -e frame.time -e ip.src -e ip.dst -e dns.qry.name -R ‘udp.dstport==53 || dns’说明:-r test.pcap 需要分析的报文记录文件(pcap格式)-T fields 输出格式,选fields按字段,也可以选json等其他格式,需结合-e 及 -E使用-e frame.time 提取数据帧时间-e ip.src 提取源IP-e ip.dst 提取目的IP-e dns.qry.name 提取dns查询的域名信息-R ‘udp.dstport==53 || dns’ 显示过滤,仅对udp目标端口为53或者dns协议的报文进行处理默认直接显示在终端上,不记录文件。常见问题tshark: Only read filters, not capture filters, can be specified when reading a capture file.tshark -r 20190409.pcap -f ‘udp’ -w udp-20190409.pcap读取文件时只能使用显示过滤,也就是只能使用-Y或-2 -R过滤tshark: -R without -2 is deprecated. For single-pass filtering use -Y.tshark -r 20190409.pcap -R ‘udp’ -w udp-20190409.pcap显示过滤-R参数需要和-2一起使用,或使用-Y参考:tshark很快,但要怎麼用?ethereal-filter使用tshark 和 shell脚本分析 DNS pcap包 系列文章: 网络分析利器wireshark命令版:tshark简介(1)网络分析利器wireshark命令版:tshark使用示例(2) ...

April 16, 2019 · 2 min · jiezi

网络分析利器wireshark命令版:tshark简介(1)

tshark是网络分析工具wireshark下的一个工具,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump难以胜任的场景中。本系列文章将整理tshark相关:简介安装在linux下安装(debian或ubuntu)sudo apt-get install tshark安装完成后在抓包之前,可以先检查版本、查看帮助等了解tshark初步了解安装后检查按照安装wireshark的方式,安装完成后,启动“终端”(命令提示符):tshark -vtshark参数命令解析查看帮助如下:➜ ~ tshark -hTShark (Wireshark) 3.0.1 (v3.0.1-0-gea351cd8)Dump and analyze network traffic.See https://www.wireshark.org for more information.Usage: tshark [options] …主要参数说明接口报文捕捉 -i <interface> 接口名或网卡编号 (默认: 第一个非环回接口) -f <capture filter> 使用libpcap过滤表达式进行包过滤 -s <snaplen> 设置每个抓包的大小,默认为65535。 (相当于tcpdump的-s,tcpdump默认抓包的大小仅为68) -p 不使用混杂模式抓捕报文(即只抓取与本机有关的流量) -I 如果支持则启用镜像模式 -B <buffer size> 内核缓存大小 (默认2MB) -y <link type> 链路层类型 (默认为找到的第一个协议) –time-stamp-type <type> 接口时间戳类型 -D 列出所有接口并退出 -L 列出所有接口链路层类型并退出(供-y参数使用) –list-time-stamp-types 列出所有接口时间戳类型并退出(供–time-stamp参数使用)捕获终止条件 -c <packet count> 捕获到n个包时停止 (默认不限,持续捕获) -a <autostop cond.> … duration:NUM - 捕获进行NUM后停止 filesize:NUM - 输出文件大于NUM KB后停止 files:NUM - 输出超过NUM个文件后停止捕获输出 -b <ringbuffer opt.> … duration:NUM - 在NUM秒后写入下一个文件(文件名由-w参数决定) interval:NUM - create time intervals of NUM secs filesize:NUM - 在文件大于NUM KB后写入下一个文件 files:NUM - 循环缓存: 在NUM个文件后替换早前的读取文件-r <infile|-> 设置需要读取的文件名及路径(或’-‘表示标准输入,从终端输入)分析处理 -2 执行two-pass分析 -M <packet count> 执行会话自动重置 -R <read filter> 包读取过滤使用wireshark显示过滤表达式(配合-2参数) -Y <display filter> 包显示过滤使用wireshark显示过滤表达式 -n 不进行名称解析 (def: all enabled) -N <name resolve flags> 启用指定的地址名字解析: “mnNtdv” (“m”代表MAC层,“n”代表网络层,“t”代表传输层,“N”代表当前异步DNS查找。) -d <layer_type>==<selector>,<decode_as_protocol> … “解析为”,详见man帮助页面。例: tcp.port==8888,http (注意选择子和解包协议之间不能留空格) -H <hosts file> 读取主机列表文件,将被写入捕获的文件(Implies -W n) –enable-protocol <proto_name> 启用协议报文解析 –disable-protocol <proto_name> 不对指定协议报文解析 –enable-heuristic <short_name> 启用协议报文启发式解析 –disable-heuristic <short_name> 不对指定协议报文启发式解析输出 -w <outfile|-> 使用pcapng格式将报文写入"outfile"文件 (或’-‘表示标准输出,直接显示在终端) -C <config profile> 启动时使用指定的配置文件 -F <output file type> 设置输出文件格式类型, 默认为pcapng格式 “-F"留空则列出所有的文件类型 -V 输出中增加报文层次树(包详细信息) -O <protocols> 仅显示以下协议的详细信息,逗号分割 -P 每写入一个文件后进行包情况汇总 -S <separator> 数据包之间的行分割符 -x 输出中增加16进制和ascii字符信息(报文按字节显示) -T pdml|ps|psml|json|jsonraw|ek|tabs|text|fields|? 文本输出格式 (默认文本:text) -j <protocolfilter> 当-T ek|pdml|json 设置时协议层过滤 (例:“ip ip.flags text”, 过滤不展开的所有字节点,除非过滤中有指定的子节点) -J <protocolfilter> 当 -T ek|pdml|json 选项设置时进行顶层协议过滤, (例: “http tcp”, 过滤展开的所有字节点) -e <field> 当 -T fields 设置时打印字段 (如tcp.port,_ws.col.Info) 此选项可以多个用于打印多个字段 -E<fieldsoption>=<value> 当-Tfields选项启用时用于输出配置: bom=y|n 打印UTF-8 BOM header=y|n 选择首行是否输出字段名(类似表头) separator=/t|/s|<char> 选择字段采用tab、空格、指定可打印字符为分割符 occurrence=f|l|a 打印第一个、最后一个或全部出现的数值(默认全部) aggregator=,|/s|<char> 选择字段采用逗号、空格、指定可打印字符聚合字段 quote=d|s|n 选择对数值采用双引号、单引号、不用引号 -t a|ad|d|dd|e|r|u|ud|? 输出格式化的时间戳(默认r: rel. 优先) -u s|hms 输出格式化秒(默认s:秒) -l 每个包之后就刷新标准输出 -q 向终端输出少量信息 (e.g. 当使用统计) -Q 仅向stderr输出确切错误信息(比-q信息更少) -g 启用组用户读取输出文件 -W n 如果支持,保存额外信息到文件中 n = 写入网络地址解析信息 -X <key>:<value> 扩展选项,详见man页面 -U tap_name PDUs专家模式, 详见man帮助页面 -z <statistics> 大量统计,详见man帮助页面 –capture-comment <comment> 在最新创建的输出文件中增加捕获注释(仅支持pcapng格式) –export-objects <protocol>,<destdir> 保存指定导出协议对象到指定目录 –color 在输出的文本格式中支持类似Wireshark图形界面的色彩,终端需要支持24位彩色 同时支持pdml、psml的色彩属性(注:这两张属性非标准) –no-duplicate-keys 如果-T json设置, 合并重复键,将多个值归并在一个键下的数组中 –elastic-mapping-filter <protocols> 如果指定-G elastic-mapping,设置仅mapping文件中指定的协议杂项 -h 显示帮助 -v 显示版本 -o <name>:<value> … 覆盖配置项 -K <keytab> 使用keytab文件用于解密kerberos -G [report] 生成一份或多份报告,默认report=“fields” 使用”-G help"获取更多信息补充说明支持包输出格式可用作不同格式转化工具,推荐使用默认的pcapngtshark -Ftshark: option requires an argument – Ftshark: The available capture file types for the “-F” flag are:… pcap - Wireshark/tcpdump/… - pcap pcapng - Wireshark/… - pcapng…捕获过滤(Capture Filter)抓包前在网络接口上设置过滤的,使用BPF表达式(tcpdump、libpcap通用)。通常用于抓取指定的ip、协议,可定位到3层,可以通过简单字符进行。不建议作过多过滤(规则复杂可能影响抓包性能)读取(显示)过滤(Display Filter)用于抓包之后,能够对报文可识别的协议字段进行过滤,可对2~7层过滤,可使用逻辑表达式,多个条件结合使用。注意:建议在使用时,先在wireshare过滤栏调试,具有字段提示,表达式合规会显示绿色参考:tshark linux 命令tshark官方文档 ...

April 16, 2019 · 2 min · jiezi

网络分析利器:tshark

tshark是wireshark网络分析工具下的一个分支,主要用于命令行环境进行抓包、分析,尤其对协议深层解析时,tcpdump难以胜任的场景中。主要参数抓包接口类-i 设置抓包的网络接口,不设置则默认为第一个非自环接口-D 列出当前存在的网络接口-f 设定抓包过滤表达式-s 设置每个抓包的大小,默认为65535。(相当于tcpdump的-s,tcpdump默认抓包的大小仅为68)-p 设置网络接口以非混合模式工作,即只关心和本机有关的流量。-B 设置内核缓冲区大小,仅对windows有效。-y 设置抓包的数据链路层协议,不设置则默认为-L找到的第一个协议,局域网一般是EN10MB等。-L 列出本机支持的数据链路层协议,供-y参数使用。 抓包进度控制-c 抓取的packet数,在处理一定数量的packet后,停止抓取,程序退出。-a 设置tshark抓包停止向文件书写的条件,事实上是tshark在正常启动之后停止工作并返回的条件。条件写为test:value的形式,如“-a duration:5”表示tshark启动后在5秒内抓包然后停止;“-a filesize:10”表示tshark在输出文件达到10kB后停止;“-a files:n”表示tshark在写满n个文件后停止。文件控制-b 设置ring buffer文件参数。 ring buffer的文件名由-w参数决定。-b参数采用test:value的形式书写。“-b duration:5”表示每5秒写下一个ring buffer文件;“-b filesize:5”表示每达到5kB写下一个ring buffer文件;“-b files:7”表示ring buffer文件最多7个,周而复始地使用,如果这个参数不设定,tshark会将磁盘写满为止。-r 设置tshark分析的输入文件。tshark既可以抓取分析即时的网络流量,又可以分析dump在文件中的数据。-r不能是命名管道和标准输入。过滤处理-R 设置读取(显示)过滤表达式(read filter expression)。不符合此表达式的流量同样不会被写入文件。注意,读取(显示)过滤表达式的语法和底层相关的抓包过滤表达式语法不相同。类似于抓包过滤表达式,在命令行使用时最好将它们quote起来-n 禁止所有地址名字解析(默认为允许所有)-N 启用某一层的地址名字解析。“m”代表MAC层,“n”代表网络层,“t”代表传输层,“C”代表当前异步DNS查找。如果-n和-N参数同时存在,-n将被忽略。如果-n和-N参数都不写,则默认打开所有地址名字解析-d 将指定的数据按有关协议解包输出。如要将tcp 8888端口的流量按http解包,应该写为“-d tcp.port==8888,http”。注意选择子和解包协议之间不能留空格输出格式-w 设置raw数据的输出文件。这个参数不设置,tshark将会把解码结果输出到stdout。“-w-”表示把raw输出到stdout。如果要把解码结果输出到文件,使用重定向“>”而不要-w参数-F 设置输出raw数据的格式,默认为libpcap。“tshark -F”会列出所有支持的raw格式-V 设置将解码结果的细节输出,否则解码结果仅显示一个packet一行的summary-x 设置在解码输出结果中,每个packet后面以HEX dump的方式显示具体数据-T 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text-t 设置解码结果的时间格式。“ad”表示带日期的绝对时间,“a”表示不带日期的绝对时间,“r”表示从第一个包到现在的相对时间,“d”表示两个相邻包之间的增量时间(delta)-S 在向raw文件输出的同时,将解码结果打印到控制台-l 在处理每个包时即时刷新输出-X 扩展项-q 设置安静的stdout输出(例如做统计时)-z 设置统计参数其它-h 显示命令行帮助-v 显示tshark的版本信息-o 重载选项基本用法在linux下安装(debian或ubuntu)sudo apt-get install tshark安装完成后在抓包之前,可以先检查版本、查看帮助等了解tshark初步了解查看tshark版本tshark -v列出当前存在的网络接口tshark -D网卡描述依据OS有不同的编号方式,在不了解网络设备及编号情况下,一般先用“tshark -D”查看网络接口的编号以供-i参数使用。注: linux可以结合ifconfig命令查看tshark对指定网卡监听,抓包sudo tshark -i <interface>抓取网卡eth0的流量并写入capture123.pcaptshark -i eth0 -w capture123.pcap读取之前的文件capture123.pcaptshark -i eth0 -r capture123.pcap抓取网卡eth0的流量10分钟tshark -i eth0 -a duration:600注: 默认时间单位为秒抓取网卡eth0的10000个数据包tshark -c 10000 -i eth0抓取网卡eth0涉及192.168.1.1的流量报文tshark -i eth0 -f “host 192.168.1.1”注: 与wireshark、tcpdump一致,均使用BPF过滤表达式抓取网卡eth0指定协议的流量报文tshark -i eth0 -f “<协议名>”协议名可以为: tcp, udp, dns, icmp, http等案例实时打印当前mysql查询语句tshark -s 512 -i eth1 -n -f ’tcp dst port 3306’ -R ‘mysql.query’ -T fields -e mysql.query说明:-s 512 :只抓取前512个字节数据-i eth0 :监听eth0网卡-n :禁止域名解析-f ‘tcp dst port 3306’ :只捕捉协议为tcp,目的端口为3306的数据包-R ‘mysql.query’ :过滤出mysql.query查询语句的报文-T fields -e mysql.query :打印mysql查询语句实时打印当前http请求的url(包括域名)tshark -s 512 -i eth1 -n -f ’tcp dst port 8000’ -R ‘http.host and http.request.uri’ -T fields -e http.host -e http.request.uri -l | tr -d ’t’说明:-s 512 :只抓取前512个字节数据-i eth1 :监听eth1网卡-n :禁止网络对象名称解析-f ‘tcp dst port 8000’ :只捕捉协议为tcp,目的端口为8000的数据包-R ‘http.host and http.request.uri’ :过滤出http.host和http.request.uri-T fields -e http.host -e http.request.uri :打印http.host和http.request.uri-l :输出到标准输出读取之前抓包文件进行报文数据分析需要从抓包的文件evidence04.pcap中提取出报文相关数据信息,如时间、源IP、目的IP、协议名、源Port、標Port、包大小等信息,最后输出到csv文件。tshark -r evidence.pcap -T fields -e frame.time_relative -e ip.src -e ip.dst -e ip.proto -e tcp.srcport -e tcp.dstport -e frame.len -E header=n -E separator=, -E quote=n -E occurrence=f > output.csv说明:-r evidence.pcap 需要分析的报文记录文件(pcap格式)-T fields 输出格式,选fields按字段,也可以选json等其他格式,需结合-e 及 -E使用-e frame.time_relative 取出相對封包時間的欄位資料-e ip.src 提取源IP-e ip.dst 提取目的IP-e ip.proto 提取协议名-e tcp.srcport 提取源Port-e tcp.dstport 提取目的Port-e frame.len 提取包大小-E header=n 是否输出字段名称(cvs的第1行)-E separator=, 指定分割符,/t是tab,/s是一格空格-E quote=n 指定是否对字段用引号,d是双引号,s是单引号,n是不用-E occurrence=f 多值时是否保留,f是第一个值,l是最后一个值,a是所有值都列出,默认全部 output.csv 输出文件路径及名称参考:tshark linux 命令tshark官方文档tshark很快,但要怎麼用?ethereal-filter ...

April 13, 2019 · 2 min · jiezi

安装mitmproxy以及遇到的坑和简单用法

mitmproxy 是一款工具,也可以说是 python 的一个包,在命令行操作的工具。MITM 即中间人攻击(Man-in-the-middle attack)使用这个工具可以在命令行上进行抓包,还可以对所抓到的包进行脚本处理,非常有用。安装 mitmproxy安装这个我们必须先安装了 pip。 pip 在安装了 python之后自带的,如果你安装了 python 就可以忽略了,如何安装这里就不说了,只说安装 mitmproxy打开命令行,输入 pip install mitmproxy 即可按下回车即可下载但是到最后下载失败error: Microsoft Visual C++ 14.0 is required. Get it with “Microsoft Visual C++ Build Tools”: http://landinghub.visualstudio.com/visual-cpp-build-tools是因为安装这个包的 window 系统需要首先安装 Microsoft Visual C++ V14.0以上 才行。可以在https://visualstudio.microsof… 直接下载即可,安装之后需要把 c++ de 库之类的东西都安装了,然后再在命令行进行安装 mitmproxy即可。安装完之后查看 mitmproxy版本命令行输入 mitmproxy –version显示错误,这是因为 window操作系统不支持使用 mitmproxy 这个命令,我们可以使用 mitmdump 或 mitmweb 代替。这样就成功了。如何使用 mitmproxy抓包开启抓包:mitmdump这样子就是开始抓包了,监听了所有的地址,端口是 8080,如果需要改端口号,可以按 ctrl + c 退出抓包,然后输入下列命令:mitmdump -p 8889这样子就把端口号改成 8889 了如果需要抓手机的包的话,就需要在你连接的 wifi 修改代理上面的主机名字是 你电脑抓包的 ip 地址,端口号是刚才设置的端口号。设置完了打开浏览器查看。发现需证书有问题,我们还需要安装 mitmproxy 提供的证书,要不抓包失败。安装证书:浏览器输入 mitm.it然后根据你的手机系统进行安装即可。然后就可以进行抓包了。在浏览器输入 baidu.com 就可以看到下面内容了。电脑端的也是这样差不多,都是设置代理后安装证书,这里就不多说了。抓包之后的操作由于在 window上操作,只能使用 mitmdump 和 mitmweb这两个命令,mitmdump 命令是没有界面,只能进行默默地抓包,不能进行数据包的查看和过滤。而 mitmweb 和在一个网页上进行抓包的调试。所以下面我们用 mitmweb 来进行调试。1.开始抓包mitmweb -p 8889在你输入 baidu.com 的时候就会看到这些包了。查看包的请求信息和响应信息只需要点击相对应的包即可。其他的就不多说了。在 mitmproxy 上运行 python脚本mitmproxy 的强大之处就在于它能够运行 python 脚本来处理相关的请求,现在就来看看如何处理吧。mitmdump -p 889 -s mitm.py这个就是在抓包的同时运行了 mitm.py 的脚本了,代码是:# 必须这样写 def request(flow): print(flow.request.headers) # 打印请求头这个是打印抓到的请求头,方法名和参数的名称是固定的,写错了就运行不了这个脚本。这样子就开始了,然后在手机上打开网页。这样子就把他们的请求头给输出了。但是输出并不明显,我们可以使用里面的一个日志模块来输出,这样子就会显示出不同的颜色了。命令行上显示这样:这样子就清楚多了。除了上面的请求头,我们还可以访问他们的请求方法,请求路径等。响应的请求也可以获取:同样,这里的方法名和参数也是固定的,不写这个会捕捉不到。本文完。 ...

January 20, 2019 · 1 min · jiezi

Charles 从入门到精通

内容清单Charles 的简介安装 CharlesCharles 初始化设置过滤网络请求截取HTTP/HTTPS数据模拟弱网环境修改网络请求修改服务器返回内容服务器压力测试反向代理解决与翻墙软件的冲突Charles 的简介Charles 是目前最主流的网络调试工具(Charles、Fiddler、Wireshark…)之一,对于一个开发者来说与网络打交道是日常需求,因此很多时候我们需要调试参数、返回的数据结构、查看网络请求的各种头信息、协议、响应时间等等。所以了解 Charles 并使用它Charles 通过将自己设置为系统的网络访问代理服务器,这样所有的网络请求都会通过它,从而实现了网路请求的截获和分析。Chareles 不仅可以分析电脑本机的网络请求(HTTP 和 HTTPS),还可以分析移动端设备的网络请求。Charles 是收费软件,作者开发出这样一个方便开发者使用的伟大工具,我们鼓励使用正版软件,但是对于一些囊中羞涩或者学生来说,有破解版的更好,别担心,这些我都准备好了,下一个 section 会讲解如何下载安装。安装 Charles方式1: Charles 官网地址,根据你的电脑操作系统选择合适的下载方式。此时下载下来的是需要收费的,不差钱的同学当然可以直接购买。购买链接方式2:按照方式1的方式去官网下载,然后下载相应 JAR包。这里以 MAC 为例,打 Finder,选择应用程序,选中 Charles,右击并选择“显示包内容”,看到 Contents 目录,点击进去选择 Java 文件夹,将下载下来的 JAR包 拖进去替换。至此,完成了 Charles 的破解。Charles 初始化设置Charles 的工作原理是将自身设置为系统的代理服务器来捕获所有的网络请求。所以使用 Charles ,我们必须设置 Charles 为系统的代理服务器。打开 Charles,当第一次启动的时候如果没有购买或者没有破解,会有倒计时,之后会看到软件的主界面,然后会请求你赋予它为系统代理的权限。点击授权会让你输入当前系统用户的密码。当然你也可以忽略或者拒绝该请求,然后等想要抓包的时候将它设置为系统的代理服务器。步骤:选择菜单中的“Proxy” -> “Mac OS X Proxy”。如下图:之后你的电脑上的任何网络请求都可以在 Charles 的请求面板中看到看看 Charles 的主界面图上红色圈1:这里代表所有网络请求的展示方式。分别名为 “Structure” 和 “Sequence”。Structure 将所有的网络请求按照域名划分并展示Sequence 将所有的网络请求按照时间排序并展示图上红色圈2:一些的网络请求设置比如 HTTPS 以及端口等信息都在这个菜单栏设置图上红色圈3:证书设置都在这里进行过滤网络请求由于 Charles 可以将电脑或者设置过的手机的所有网络请求捕获到,而且我们分析网络传输应该是针对某个特定的网络下的抓包分析,为了清楚明显地看到我们感兴趣的网络请求通常会用到 Charles 的“过滤网络请求的功能”。方法1:在 Charles 主面板的左侧所有网络请求的下方可以看到看到一个 ”Filter“ 输入栏,在这里你可以输入关键词来筛选出自己感兴趣的网络请求。比如我想分析的网络请求来自于”www.baidu.com" 下,你可以在下面输入"baidu"即可。方法2:在 Charles 菜单栏的顶部会看到 “Proxy” 的选项,点击菜单栏选择 “Proxy” -> “Recording Settings” 。选择 “include”。看到面板上面有一个 “Add” 按钮,点击后在弹出的面板里面设置好我们需要分析的网络请求的协议、主机名、端口、路径、参数,当然你也可以只设置一些主要的信息,比如协议和主机名的组合。方法3:一般打开 Charles 并设置好配置信息后(比如电脑本机或者设置过代理的手机)所有的网络请求都将在 Charles 的面板上显示,同时我们感兴趣的网络请求如果也在面板上显示的话,“Structure”模式下可以选中需要分析的网络请求,鼠标右击选择“Focus”。“Sequence”模式下可以在面板的网络请求显示面板的右下角看到一个Focus按钮,点击勾选后 Charles 只会显示你感兴趣的网络请求。截取HTTP/HTTPS数据截取 HTTP 请求Charles 的主要目的是抓取捕获网络请求,这里以 iPhone 的抓包为例讲解。Charles 的设置要截获 iPhone 的网络请求就需要为 Charles 开启代理功能。在菜单栏选择“Proxy” ->“Proxy Settings”。填写代理的端口号并将“Enable transparent HTTP proxying”勾选上。iPhone 上的设置在电脑“系统偏好设置”中心打开网络查看本机 IP 地址,打开手机“设置”->“无线局域网”,进入当前使用的网络,点击进入当前 WIFI 的详情页(可以看到当前 WIFI 的基本信息,包括子网掩码、端口、IP地址、路由器),在最下角可以看到“DNS”和“HTTP代理”2个section。我们点击“配置代理”,设置 HTTP 代理选中“手动”。服务器处填写电脑ip地址,端口写8888。设置好后,我们打开 iPhone 上的任意需要网络请求的应用,就可以看到 Charles 弹出请求的确认菜单,单击"Allow"按钮,即可完成设置。截取 HTTPS 请求如果你需要捕获 HTTPS 协议的网络请求,那么则需要安装 Charles 的 CA 证书。步骤如下;首先需要在 MAC 上安装证书。点击 Charles 顶部的菜单栏,选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”。在 keychain 处将新安装的证书设置为永久信任即使安装了 CA 证书,Charles 默认是不捕获 HTTPS 协议的网络请求,所以我们需要对某个主机下的网络请求抓包分析的话,选中该网络请求右击选中 “SSL Proxying Enabled”。这样就可以看到我们感兴趣的HTTPS 网络请求了。如果你需要捕获移动设备的 HTTPS 网络请求,则需要在移动设备上安装证书并作简单的设置选择 Charles 顶部菜单栏选择 “Help” ->“Install Charles Root Certificate on a Mobile Device or Remote Browser”。然后就可以看到 Charles 弹出的安装说明了。在手机设置好 Charles 代理的情况下,在手机浏览器输入 “chls.pro/ssl”。安装提示下载好CA证书。验证刚刚安装的 CA证书iPhone 打开设置 -> 通用 -> 关于本机 -> 证书信任设置 -> 开启开关在 Charles 菜单栏 Proxy -> SSL Proxying Setting -> 点击 Add 按钮 -> 在弹出的对对话框设置需要监听的 HTTPS 域(*:代表通配符)设置完毕,尽情抓取你想要的 HTTPS 网络请求吧。## 模拟弱网环境在平时开发的时候我们经常需要模拟弱网环境,并作弱网环境下的适配工作。Charles 为我们提供了这个服务。在 Charles 菜单栏选择 “Proxy” -> “Throttle Settings”。在弹出的面板上设置网络请求的参数(上行,下行带宽、利用率、可靠性等等信息)。如下图所示。如果你想对指定主机进行弱网环境下的测试,可以点击上图的“Add”按钮,在弹出的面板上设置协议、主机、端口来对指定的主机进行弱网设置。修改网络请求对于捕获的网络请求,我们经常需要修改网络请求的cookie、Headers、Url等信息。Charles 提供了对网络请求的编辑和重发功能。只需要选中需要修改编辑的网络请求,在对应的右上角看到有一个“钢笔”的按钮,点击后就可以对选中的网络请求进行编辑了,编辑好后可以在右下角看到 Execute 按钮。这样我们编辑后的网络请求就可以被执行了。修改服务器返回内容很多时候为了方便调试代码,我们会有这种需求,修改接口返回的数据节点或者内容、甚至是状态码。比如数据为空、数据异常、请求失败、多页数据的情况。 Charles 为我们提供了超实用的功能,“Map(Map Local、Map Remote)功能”、Rewrite功能、Breakpoints功能 ,都可以实现修改服务端返回数据的功能。但是有区别和适用场景:Map 功能适合长期地将某一请求重定向到另一个指定的网络地址或者本地 JSON 文件Rewrite 功能适合对网络请求进行一些正则替换Breakpoints 功能适合对网络请求进行一些临时性的修改(类似于我们开发的断点作用)Map 功能Map 功能分为 Map Local(将某个网络请求重定向到本地 JSON 文件) 和 Map Remote 功能(将网络请求重定向到另一个网络接口)。在 Charles 菜单栏选择 “Tools” -> “Map Remote” 或 “Map Local” 即可进入相应的功能模块。Map Remote 功能适合于切换线上到本地、测试服务到正式服务的场景。比如下图从正式服务切换到测试服务Map Local 功能我们需要填写重定向的原地址信息和本地目标文件。我们可以先将某个接口的响应内容保存下来(选择对应的网络请求,右击点击 Save Response )成为 data.json 文件。然后我们编辑里面的 status 、message、data 等信息为我们想要的目标映射文件。如下所示,我将一个网络请求的内容映射到我本地的一个 JSON 文件。之后这个请求的内容都从网络变为返回我本地的数据了。Map Local 可能会存在一个小缺陷,其返回的 HTTP Response Header 与正常的网络请求不一样,如果程序设置了校验 Header 信息,此时 Map Local 就会失败,解决办法是同时使用 Rewrite功能将相关的HTTP 头部信息 rewrite 成我们需要的信息Rewrite 功能Rewrite 适合对某个网络请求进行正则替换,以达到修改结果的目的。假如我的 App 的界面上的显示的功能模块及其点击事件是根据接口来完成的,我想实现替换功能模块的名称的目的。步骤:点击顶部菜单栏的“Tools” -> “Rewrite”。在弹出的面板上勾选 “Enable Rewrite”。点击左下角的 Add按钮,在右上角的 Name:处写好本次配置的名称(如果有多个 Rewrite,为了后期容易区分)。可以针对特定的网络请求进行 Rewrite。可以点击右上角 Location 面板下面的 Add按钮。在弹出的面板上设置网络请求配置信息。注意此时需要同时设置 Protocol、Port、Host、Path信息(我测试加了 Protocol、Host、Port这3个是无效的)然后对指定的 Type 和 Action 进行 Rewrite。Type 主要有 Add Header、Modify Header、Remove Header、Host、Path等等。Where 可以选择 Request 和 Response。指的是下面的修改是针对 Request 还是 Response完成设置后点击 Apply 按钮,即可生效。下次继续请求该网络,返回的内容就是我们刚刚设置的内容。比如当前的“政策法规”要变成“哈哈哈,我是假的政策法规”。这时候就可以使用 Rewrite 功能Breakpoints 功能Breakpoints 相比于其他几个修改网络请求的特点是只是针对当前的网络请求,Breakpoints 只存在于设置过的当前的网络请求,Charles 关闭后下次打开 Breakpoints 消失了。想要修改网络请求 Breakpoints 步骤最简单,跟我们调试工具里面设置的断点一样方便。对于我们设置了 Breakpoints 的网络请求, Charles 会在下次继续访问该请求的时候停止掉,就跟 debug 一样。此时我们可以 Edit Request,修改过 Request 之后点击右下角的 Execute 按钮。然后等到服务端返回的时候继续是断点状态,此时可以 Edit Response。步骤: 选中某个网络请求 -> 右击 -> 点击“Breakpoints”。如下图:对该接口设置了 Breakpoints。请求网络后 Edit Response,点击 execute 后服务端返回的结果就是我们编辑的内容了。服务器压力测试我们可以使用 Charles 的 Repeat 功能地对服务器进行并发访问进行压力测试。步骤:选中某个网络请求 -> 右击 -> Repeat Advanced -> 在弹出的面板里面设置总共的迭代次数(Iterations)、并发数(Concurrency) -> 点击“OK” 。开始执行可以看到以设置的并发数的规模,进行总共达设置的总共迭代次数的访问。(专业的压力测试工具:Load Runner)反向代理Charles 的反向代理功能允许我们将本地指定端口的请求映射到远程的另一个端口上。设置:点击顶部菜单栏 Proxy -> 点击 Reverse Proxies。如下所示,我将本地的 8080 端口映射到远程的 80 端口上,点击 OK 生效后,当我继续访问本地的 80 端口,实际返回的就是远程 80 端口的提供的内容了。解决与翻墙软件的冲突Charles 的工作原理是把自己设置为系统的代理服务器,但是我们开发者经常会利用 VPN 翻墙访问谷歌查找资料(这些翻墙软件的工作原理也是把自己设置成为系统的代理服务器),为了2者和平共处。我们可以在 Charles 的 External Proxy Settings 中将翻墙的代理端口等信息填写。同时我们需要关闭翻墙软件的自动设置,更改为“手动模式”。(使其不主动修改系统代理)总结Charles 功能强大、界面简洁,读完这篇文章并做出练习,相信你能很快掌握它,“工欲善其事,必先利其器” ,掌握了它,相信可以为你大大提高开发中调试网络的效率。Enjoy yourself ...

January 20, 2019 · 2 min · jiezi

抓包软件 Fiddler 了解一下?

学会如何抓包,是爬虫的必备技能,甚至可以说,不会抓包就等同于不会爬虫。那我们怎样抓包呢?如果直接抓取浏览器上的内容,可以直接使用开发者工具进行抓包,但有个局限,只能抓浏览器的,功能也没有多少。还可以使用别的工具,比如 mitmproxy、charles,当然还有今天所说的 Fiddler 。今天要分享的就是如何使用fiddler进行抓包以及它的功能讲解。1. 下载并安装fiddler下载地址:https://www.telerik.com/downl…这里填写下你的下载目的和国家就可以下载了,安装的话这里就不多说了。2. Fiddler工作原理以及优缺点图片来自https://blog.csdn.net/DreamTL…如上图,Fiddler 作为一个代理,先是捕捉到客户端的 request 请求,然后再自己转发到服务器端,服务器接收到请求时,会返回一个响应 response ,Fiddler 还是会继续捕捉到服务器的响应请求,再来转发给客户端,简单来说, Fiddler 就是作为一个中间人。优缺点:只支持 http、https、ftp、webscoket 数据流等相关协议的捕捉,无法监测或修改其他数据流,如 SMTP、POP3 协议(邮箱相关的协议),无法处理请求和响应超过 2GB 的数据,还有就是只支持 windows 平台,如果想要支持 mac 的话,建议下载 charles ,不过很吃性能,在我机子上运行下那风扇就想起来了。3. Fiddler 功能详解3.1 如何进行抓包1)先勾选允许抓取 https 流量这个就是允许抓取 https 的流量。如果第一次使用,勾选之后会提示你安装一个证书,这个证书就是用来做中间人进行抓包的, Fiddler使用此证书来解密所捕捉到的包,再加密转发到相对应的服务器端或者客户端。如果你还没有安装就点击 Yes 安装即可,如果没有弹出此窗口的也可以点击右上角的 actio 按钮的第一个选项也是可以弹出此个窗口的上面圈出来的是表示抓取哪一部分的流量。from all processes:抓取所有进程的流量from browsers only:只抓取浏览器的流量from non-browsers only:不抓取浏览器的流量from remote clients only:抓取远程的客户端,当需要抓取的是手机端的流量,就需要用到这个2)接下来设置端口号一般默认即可,这里我设置成了8889。下面的那个 Allow remote computers to connect 是允许远程的客户端进行连接,如果抓取手机端的也需要勾选。3)浏览器设置代理服务器Fiddler 的设置完了,这时候还需要在你的浏览器上设置代理服务器才能进行抓取。使用 Chrome 浏览器的可以直接使用 SwitchyOmega 插件进行修改即可,操作简单。点击新增情景模式选择代理服务器,随后填写任意名字,这里我填写的是 Fiddler,点击创建即可。然后填写以上内容,代理服务器为本机,端口号为上面在 Fiddler 设置的端口号,填写完在左下角点应用选项才算设置完毕。设置完之后再在浏览器插件处点击该插件,然后选择该模式即可开始抓包设置完之后第一次打开可能是这样的关闭 Fiddler 再重新打开就可以了3.2 进行手机端抓包手机端的抓包也是很容易的,先是设置好 Fiddler 的允许抓取远程客户端。这时用手机连接wifi,然后长按修改网络(不同安卓手机不一样)点击代理,然后点击手动主机名就写你电脑上的 ip 地址,查看 ip 地址可以在控制台上输入 ipconfig 即可由于我的电脑也是连接 wifi 的,所以 ip 地址对应的是 无线网络的那个,如果你的电脑是使用网线来进行上网的,那 ip 地址就是 以太网的那个。填完之后还不能抓取,如果直接抓取会显示证书有问题。我们也是需要安装证书才可以正常抓取的。那接下来安装证书手机浏览器输入 你的ip地址:端口号 进入网址下载证书,如 192.168.1.2:8888, 端口号还是之前在 Fiddler设置的那个点击上图箭头的网址进行下载即可,下载完毕之后点击安装即可。如果你是 miui 系统的机子,就需要进入wifi 设置的界面进行安装点击 高级设置 –> 安装证书 即可,期间需要密码验证或者设置密码之类的设置即可。还有一个大坑,就是如果你的机子 是安卓 9 而是 miui 系统(其他系统没测试过)的话,安装了证书也是没用的,在进行抓包的时候还是会提示证书有问题。安卓 8 版本的我没有测试过,不过安卓 7 版本以下的估计都可以。弄完了以上的东西就可以抓包了,如果设置完了,网络没了,还是那样子,第一次设置完需要重启下 Fiddler 软件就可以抓包了。3.3 抓包内容的介绍很明显左边的就是捕捉的请求和响应,右边的就是对应请求的详细信息,比如请求头,表单信息,比如上图下面箭头所指的就是表单信息。,如果这些信息看到的内容很少的话,可以直接点击下面的 View in Notepad 按钮就可以在笔记本中显示出来,非常方便。左边每列代表的含义为:左边第一列中每个图片代表的含义为:3.4 再说几个常用的功能查找:抓包时,经常会抓到一堆不重要的包,而需要找的包夹杂在里面非常难找,所以就可以用关键字来查找,入口为:也可以直接点击这个或者直接按快捷键 Ctrl + F 即可这里的功能很强大,可以只查找请求或者响应或者两个都查,还可以用正则表达式来查找,就不一 一说了。映射:也就是重定向,将服务器端的响应内容可以更改为客户端上的文件,功能也是很强大,之前我在爬取网易云评论时也是弄过的,有兴趣的可以看看利用python爬取网易云音乐,并把数据存入mysql。在这里填写对应的规则和文件即可还有一个类似于 postman的功能,就是下面这个就是在这里模拟请求,有什么需要模拟的话可以先在这里模拟一次,成功之后再用编程去敲出来也是不错的,非常强大。由于篇幅问题,还有一些功能就暂时不介绍了,等以后用到的时候会说哈,比如断点调试之类的,到时记得时刻关注哦! ...

January 14, 2019 · 1 min · jiezi

使用Charles抓包

首发于 樊浩柏科学院Charles 是在 Mac 下常用的截取网络封包的工具(Win 环境也已支持),在移动端开发过程中,我们常需要截取网络包分析服务端的通讯协议。Charles 将自己设置成系统的网络访问代理服务器,不仅可以提供 SSL 代理,还支持流量的控制、支持重发网络请求、支持修改网络请求参数、支持网络响应截获并动态修改。安装Charles从 Charles 的 官方网站 下载最新的安装包,下载晚完成安装即可。Charles 是付费软件,当然免费状态也可以使用。可以使用如下信息完成注册:Registered Name: https://zhile.ioLicense Key: 48891cf209c6d32bf4如果注册失败,可以尝试 这种方法。设置成系统代理服务器由于 Charles 是通过将自己设置成代理服务器来完成封包截取的,所以第一步是需要将 Charles 设置成系统的代理服务器。启动 Charles 后,菜单中的 “Proxy” -> “Windos Proxy(或者Mac OS X Proxy)”, 来将 Charles 设置成系统代理。如下所示:配置后,就可以在界面中看到截取的网络请求。但是,Chrome 和 Firefox 浏览器默认并不使用系统的代理服务器设置, 所以需要将 Chrome 和 Firefox 设置成使用系统的代理服务器,或者直接设置成地址127.0.0.1:8888。如果 Chrome 已安装了 Host Switch Plus 插件,则需要暂时关闭。过滤网络请求一般情况下,我们只需要监听指定服务器上发送的请求,可以使用如下办法解决:方式1:在主界面 “Sequence” -> “Filter” 栏位置输入需要过滤的关键字即可。例如输入fanhaobai,则过滤输出只包含 fanhaobai 信息的请求。方式2:在 Charles 的菜单栏选择 “Proxy” -> ”Recording Settings”,并选择 Include 栏,添加一条永久过滤规则,主要填入需要截取网站的协议、主机地址、端口号。方式3:右击需要过滤的网络请求,选择 “Focus” 选项即可。方式 1 和方式 3 可以快速地过滤临时性网络请求,使用方式 2 过滤永久性网络请求。截取移动设备网络包Charles 除了可以截取本地的网络包,作为代理服务器后,同样可以截取移动设备的网络请求包。设置Charles截取移动设备网络包时,需要先将 Charles 的代理功能打开。在 Charles 的菜单栏上选择 “Proxy” -> ”Proxy Settings”,填入默认代理端口 8888,且勾选 “Enable transparent HTTP proxying” 就完成了设置。如下图所示:iPhone首先,通过 Charles 的顶部菜单的 “Help” -> ”Local IP Address” 获取本地电脑的 IP 地址,例如我的本机电脑为192.168.1.102。在 iPhone 的 ”设置“ -> ”无线局域网“ 中,对当前局域网连接设置 HTTP 代理(端口默认为 8888),如下图:设置完成后,打开 iPhone 的任意程序,在 Charles 就可以弹出连接确认窗口,点击 ”Allow” 即可。Android在 Android 上操作同 iPhone,只是某些系统设置方式不一致而已。截取 Https 包如果需要截取并分析 Https 协议信息,需要安装 Charles 的 CA 证书。本地通信信息点击 Charles 的顶部菜单,选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate”,即可完成证书的安装。如下图所示:建议将证书安装在 ”受信任的根证书颁发机构“ 存储区。特别说明,即使安装完证书后,Charles 默认是不会截取 Https 网络通讯的信息。对于需要截取分析站点 Https 请求,可以右击请求记录,选择 SSL proxy 即可,如图所示:移动设备的通信信息如果在 iPhone 或 Android 机器上截取 Https 协议的通讯内容,需要手机上安装相应的证书。点击 Charles 的顶部菜单,选择 “Help” -> “SSL Proxying” -> “Install Charles Root Certificate on a Mobile Device or Remote Browser”,然后按照 Charles 的提示的安装教程安装即可。如下图所示:在上述 截取移动设备网络包 为手机设置好代理后,手机浏览器中访问地址http://chls.pro/ssl,即可打开证书安装的界面。安装完证书后,就可以截取手机上的 Https 通讯内容了。注意,同样需要在要截取的网络请求上右击,选择 SSL proxy 菜单项。如果 SSL proxy 后出现如下错误:可将证书设置为信任即可,例如 iPhone 下 “设置” -> “通用” -> “关于本机” -> “证书信任设置” 下:模拟慢请求在做 App 开发调试时,经常需要模拟慢请求或者高延迟网络,以测试应用在网络异常情况变现是否正常,而这使用 Charles 就轻松帮我们完成。在 Charles 的菜单上,选择 “Proxy” -> ”Throttle Setting” 项,在弹出的窗口中,可以勾选上 “Enable Throttling”,并且可以设置 Throttle Preset 的类型。如下图所示:当然可以通过 “Only for selected hosts” 项,只模拟指定站点的慢请求。修改请求内容有时为了调试服务端的接口,我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需在该网络请求上点击右键,选择 “Compose”,即可创建一个可编辑的网络请求。我们可以修改该请求的任何信息,包括 URL 地址、端口、参数等,之后点击 “Execute” 即可发送该修改后的网络请求。Charles 支持我们多次修改和发送该请求,这对于我们和服务器端调试接口非常方便,如下图所示:修改响应内容有候为方便我们调试一些特殊情况,需要服务器返回一些特定的响应内容。例如数据为空或者数据异常的情况,部分耗时的网络请求超时的情况等。通常让服务端配合,构造相应的数据显得会比较麻烦,这个时候,使用 Charles 就可以满足我们的需求。根据不同的场景需求,Charles 提供了 Map 功能、 Rewrite 功能以及 Breakpoints 功能,都可以达到修改服务器返回内容的目的。这三者在功能上的差异是:Map 功能适合长期地将某一些请求重定向到另一个网络地址或本地文件。Rewrite 功能适合对网络请求进行一些正则替换。Breakpoints 功能适合做一些临时性的修改。Map功能Charles 的 Map 功能分 Map Remote 和 Map Local 两种。Map Remote 是将指定的网络请求重定向到另一个网址请求地址,而 Map Local 是将指定的网络请求重定向到本地文件。在 Charles 的菜单中,选择 “Tools” -> ”Map Remote” 或 “Map Local” ,即可进入到相应功能的设置页面。对于 Map Remote 功能(选中 Enable Map Remote),我们需要填写网络重定向的源地址和目的地址,对于其他非必需字段可以留空。下图是一个示例,我将测试环境t.fanhaobai.com的请求重定向到了生产环境www.fanhaobai.com。对于 Map Local 功能(选中 Enable Map Local),我们需要填写的重定向的源地址和本地的目标文件。对于有一些复杂的网络请求结果,我们可以先使用 Charles 提供的 “Save Response…” 功能,将请求结果保存到本地并稍加修改,成为我们的目标映射文件。Rewrite功能Rewrite 功能功能适合对某一类网络请求进行一些正则替换,以达到修改结果的目的。例如,将服务端返回的www.fanhaobai.com全部替换为www.baidu.com,如下:将响应中的www.fanhaobai.com全部替换为www.baidu.com。于是在 “Tools” -> “Rewrite” 下配置如下的规则:选中 “Enable Rewrite” 启用 Rewrite 功能 ,响应如下:Breakpoints功能上面提供的 Rewrite 功能最适合做批量和长期的替换,但是很多时候,我们只是想临时修改一次网络请求结果,这个时候,我们最好使用 Breakpoints 功能。在需要打断点的请求上右击并选择 “Breakpoints”,重新请求该地址,可以发现客户端被挂起,Charles 操作界面如下:此时可以修改请求信息,但这里只修改响应信息,故点击 “Execute” 后选择 “Edit Response” 项,修改 title 为fanhaobai.com,如下:继续点击 “Execute” ,可看见响应的 title 已经变为fanhaobai.com。压力测试我们可以使用 Charles 的 Repeat 功能来简单地测试服务器的并发处理能力。在想压测的网络请求上右击,然后选择 “Repeat Advanced” 项,如下所示:这样我们就可以在上图的对话框中,选择压测的并发线程数以及压测次数,确定之后,即可开始压力测试了。反向代理Charles 的反向代理功能允许我们将本地的端口映射到远程的另一个端口上。 ...

December 4, 2018 · 2 min · jiezi