开发过程中快速抓包并解析

这几天小编在工作中遇到了一个灵异事件,客户端使用的是安卓原生系统,服务端使用的是java。需求就是客户端在照相的时候可以实时上传照片。后台接收并保存,并且可以在平台上显示。看似简单的功能,确有个很大的坑。有2个平台,192.168.31.87平台是测试环境,192.168.31.239是演示环境,测试环境,演示环境,还有安卓客户端代码都是一样的,连mq,redis,nginx,数据库都是一样的。但是安卓端上传测试环境一直报java.net.SocketException,在演示环境上是正常的。检查服务端代码。我首先用了postman进行测试.

image.png

由于已经上传过一张一样的照片,所以这里返回failed,但是请求是200.说明是调用正常。然后我在微服务上写了个测试类,用httpclient调用结果也是正常。

image.png

在安卓客户端上传的时候,正常和不正常的log分别是

正常:
response-->Response{protocol=http/1.1, code=200, message=OK, url=http://192.168.31.239:8081/api/collDataUpload?para={%22fileName%22:%2220180822_185110_523.jpg%22,%22pno%22:%2220180821%22,%22dkey%22:%2215948c07-c718-4f32-a0af-4b7841fa95a0%22,%22stime%22:%221534935070523%22,%22etime%22:%221534935071000%22}}不正常:
response-->Response{protocol=http/1.1, code=400, message=, url=http://192.168.31.87:8081/api/collDataUpload?para={%22fileName%22:%2220180822_184559_902.jpg%22,%22pno%22:%228230%22,%22dkey%22:%22d351aa68-bace-438f-8d08-89ff598d4e04%22,%22stime%22:%221534934759902%22,%22etime%22:%221534934760000%22}}

安卓客户端部分代码

/**
     * 同步基于post的图片上传
     *
     * @param url
     * @param file
     * @return
     */
    public Response uploadPic(String url, File file, String fileName) throws IOException {
        MultipartBody.Builder builder = new MultipartBody.Builder();
        builder.setType(MultipartBody.FORM);
        Log.i("huang", "files[0].getName()==" + files[0].getName());        //第一个参数要与Servlet中的一致
        builder.addFormDataPart("file", fileName, RequestBody.create(MediaType.parse(guessMimeType(fileName)),
                file));

        MultipartBody multipartBody = builder.build();

        Request request = new Request.Builder().url(url).post(new ProgressRequestBody(multipartBody, listener)).build();
        okHttpClient.newCall(request).enqueue(callback);

    }

服务端

image.png

然后客户端调用服务端连这个接口都没进来,首先我判断配置文件是否有对文件大小进行过滤,然后看了filter也没什么。百思不得奇解。于是做了很多操作。虽然最后问题还是没=解决,但是到get到了很多新技能。 非常重要的一个技能:抓包。 ··· 大致步骤为: 1.首先在linux服务器上执行指令 2.调用接口,然后执行指令把linux文件下载到本地 3.使用Wireshark查看日志 需要使用的linux命令 netstat -tupln | grep 5088 tcpdump -i any -p -s 0 -w /tmp/cap.pcap sz /tmp/cap.pcap ···

image.png

image.png

image.png

然后到开始菜单换中打开

image.png

Wireshark这软件,小伙伴百度下载即可 地址栏中可以输入过滤条件: ip.addr == 192.168.31.182 and http

image.png

选中其中你想看的包,右键追溯流--->TCP流或者http流

image.png

这里大致解释一下: Content-Type:是上传文件格式multipart/form-data是指图片。 boundary=XXXX,这是前端传的时候使用的一种形式addBoundary Content-Length是内容大小 Host:是服务器主机地址 Connection是链接状态 Accept-Encoding是接收的编码格式 User-Agent:是用户上传的形式,这里安卓使用的是okhttp/3.6.0 content-Desposition是上下文的描述 content-Type:内容类型 很开心,又get到了一个新技能,但是我的问题还是没有解决。目前的解决办法就是自己在写个安卓端,单独用做个按钮,然后用okhttp上传文件到平台。 另外在操作安卓的时候遇到了adb.exe已停止工作,然后开启不了虚拟机的问题。

image.png

出错画面:

image.png

一般出现这个错误的原因都是由于adb的默认端都5037,被其他程序占用了。小编我就碰到过被酷我音乐,鲁大师和被360mobile的exe程式占用了,后来这些程式全部被我删了!   首先我们应该在电脑中查看5037的端口情况,输入 netstat -aon|findstr "5037":

image.png

我们可以看到PID为4476的程式使用了关端口,然我我们打开任务管理器。

image.png

我们可以看到进程为“360MobileLoader.exe *32”的进程占用了5037端口。理论上来说我们结束这个进程应该就行了。但是问题来了!

image.png

image.png

居然不让我删除!!!!!!!!PS:我自己的电脑,删不删除还需要你的同意?

image.png

选择打“”开文件位置“”,找到对应的exe程式,我这儿使用的是360强制删除,PS:普通删除的方同样不允许我删除。   我删除了之后,电脑重新注销了一下,adb.exe正常启动起来了。

Genymotion又开启了。小姐姐又回来了哈哈。

image.png

在附送一个知识:无界鼠标.就是一个鼠标键盘控制N台电脑(可以是不同操作系统) 附上链接

原文发布于微信公众号 - 编程软文(zhuyuansj)

原文发表时间:2018-08-24

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端正义联盟

gitflow 开发流程学习(第二部分)

1646
来自专栏Crossin的编程教室

[Hexo]部署博客及更新博文

本系列其它文章: 用 GitHub + Hexo 建立你的第一个博客 将本地文件部署到 GitHub 修改 Hexo 中的 _config.yml 文件 在...

3469
来自专栏xingoo, 一个梦想做发明家的程序员

Volatile的作用

众所周知,volatile关键字可以让线程的修改立刻通知其他的线程,从而达到数据一致的作用。那么它具体涉及到哪些内容呢? 关于缓存 计算机最大的存储空间就...

2088
来自专栏IT笔记

Struts2升级版本至2.5.10,高危漏洞又来了

前情概要 漏洞年年有,最近特别多。2017年3月6日,Apache Struts2被曝存在远程命令执行漏洞,漏洞编号:S2-045,CVE编号:CVE-2017...

3263
来自专栏北京马哥教育

操作系统能否支持百万连接?

下面来分别对这几个问题进行分析. 1. 操作系统能否支持百万连接? 对于绝大部分 Linux 操作系统, 默认情况下确实不支持 C1000K! 因为操作系统包含...

3625
来自专栏代码世界

Python之IO模型

IO模型介绍 为了更好地了解IO模型,我们需要事先回顾下:同步、异步、阻塞、非阻塞     同步(synchronous) IO和异步(asynchronous...

42911
来自专栏gaoqin31

Linux索引节点(inode)用满导致的一次故障

一、发现问题:   在一台配置较低的Linux服务器(内存、硬盘比较小)的/data分区内创建文件时,系统提示磁盘空间不足,用df -h命令查看了一下磁盘使用情...

2292
来自专栏北京马哥教育

Python定时利用QQ邮件发送天气预报

好久没有写博客了,正好今天有时间把前几天写的利用python定时发送QQ邮件记录一下。 首先利用request库去请求数据,天气预报使用的是和风天气的API(...

46410
来自专栏程序员互动联盟

【入门必备】编程必备技能--抓出代码中的蛀虫

很多的朋友,在写代码的时候经常运行出错然而却找不到哪里错了。那就是你没有学会分析错误,你到底错在哪里了?为什么错了? 第一种代码致命错误。 一般的错误代码在编译...

2866
来自专栏信安之路

记一次审计 xiaocms 的过程

周末在家刚吃完晚饭,基友 DM 叫我一起来审计 xiaocms 系统,也不知道他是受到啥刺激了。正好,除了 Code Review 公司项目代码及框架代码,未审...

6430

扫码关注云+社区

领取腾讯云代金券