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

这几天小编在工作中遇到了一个灵异事件,客户端使用的是安卓原生系统,服务端使用的是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台电脑(可以是不同操作系统)
附上链接

image.png

原文地址:https://www.cnblogs.com/springboot/p/9527524.html

时间: 2024-11-09 04:37:18

开发过程中快速抓包并解析的相关文章

python+scapy 抓包与解析

1. 简介 最近一直在使用做流量分析,今天把 scapy 部分做一个总结. python 的 scapy 库可以方便的抓包与解析包,无奈资料很少,官方例子有限,大神博客很少提及, 经过一番尝试后,总结以下几点用法以便大家以后使用. 2. 用法实例 安装 作为初学者,关心的首先是如何安装,本人电脑系统是 fedora, 建议使用 linux. 推荐下载 pip,直接:(当然得在 su 权限下) pip install scapy 在 terminal 中输入 scapy, 如果有下面形式即安装好了

tshark的抓包和解析

1. a.解析dhcp抓包文件 -r 读抓好的数据包文件 tshark -r 数据包路径 -Y 过滤条件   基本上可以运用 wirshark上的过滤条件 查找中继后dhcp discover src ip 报文 tshark  -r E:\testpacket\testdhcp.pcapng -Y "bootp && ip.src == 192.168.108.1 && bootp.option.dhcp == 1" 查看dhcp discover s

linux抓包并解析

tcpdump 的抓包保存到文件的命令参数是-w xxx.文件名后缀 tcpdump  -w /opt/test.pcap 可参阅http://liuzhigong.blog.163.com/blog/static/1782723752012851043396/ 然后用wireshark软件进行分析pcap文件即可 eg:过滤器中增加 ip.dst == 210.22.109.86可以分析出有多少ip向改目的ip发送数据

android开发过程中引用第三方包

关于android开发中使用第三方jar包问题: 一般都是打包好的jar包,那么拷贝到工程下面的libs包下面即可. 如果还是源码有两种方法导入: 方法一: 点击项目右键  点击properties  快捷键Alt+Enter 然后选择android  然后在右下方选择add  然后选择需要导入的jar包   当然源码包必须保证勾选了is library  (勾选方法:右键项目-android  中间偏下有个单选框,选择就是表示这个项目工程是作为第三方包) 导入图: 导入成功: 然后点击Appl

实用抓包工具:whistle

无论是前端开发还是客户端,实际开发过程中,抓包都经常被用到.工欲善其事必先利其器,一款好用的抓包工具也是必须的. 说到抓包,Windows系统上不少人都用过Fiddler,Mac或Linux上用Charles,本文主要推荐一款支持多系统的抓包工具:whistle. whistle,具有跨平台(Win/Mac/Linux)的 Fiddler之称,基于NodeJs实现,是一款比较新的新的跨平台web调试代理工具. 看一下whistle当前主要实现了的功能图谱.具备常用的抓包所有功能,并支持自实现的插

抓包工具tcpdump用法说明

本文目录: 1.1 tcpdump选项 1.2 tcpdump表达式 1.3 tcpdump示例 tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: shell> tcpdump -nn -i eth0 icmp 下面是详细的tcpdump用法. 1.1 tcpdump选项 它的命令格式为: tcpdump [ -DenNqvX ] [ -c cou

tcpdump抓包工具用法说明

tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: shell> tcpdump -nn -i eth0 icmp 下面是详细的tcpdump用法. 1.1 tcpdump选项 它的命令格式为: tcpdump [ -DenNqvX ] [ -c count ] [ -F file ] [ -i interface ] [ -r file ] [ -

【Linux命令】tcpdump抓包工具

一.tcpdump介绍 tcpdump - dump traffic on a network tcpdump是一个用于截取网络分组,并输出分组内容的工具.凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具 tcpdump 支持针对网络层.协议.主机.网络或端口的过滤,并提供and.or.not等逻辑语句来帮助你去掉无用的信息 二.tcpdump选项 抓包选项: -c:指定要抓取的包数量.注意,是最终要获取这么多个包. -i interface:指定tcpd

UNIX系统上的抓包工具tcpdump常用命令说明

tcpdump 介绍 tcpdump采用命令行方式对接口的数据包进行筛选抓取,其丰富特性表现在灵活的表达式上. 不带任何选项的tcpdump,默认会抓取第一个网络接口,且只有将tcpdump进程终止才会停止抓包. 例如: tcpdump - dump traffic on a network tcpdump是一个用于截取网络分组,并输出分组内容的工具.凭借强大的功能和灵活的截取策略,使其成为类UNIX系统下用于网络分析和问题排查的首选工具 tcpdump 支持针对网络层.协议.主机.网络或端口的