用Wireshark抓包分析请求

前言

有些封装好的API把错误都屏蔽掉,直接返回某一个不明确的具体错误,让人感到困惑。

//code in SDK read-only
public static Data requestHandler(result) throws ApiException{
        try{
            resultEntity = JSONObject.parseObject(result);
        }catch (Exception e){
            throw new ApiException(SysEnums.SYS_ERR);
        }
        if(resultEntity == null || resultEntity .get("data") == null){
            throw new ApiException(SysEnums.SYS_ERR);
        }
}
public static Data someAPI(methodName,params) ApiException{
    return requestHandler(getURLPATH(methodName),params);
}

//Implements
try{
        result = someAPI(apiName,params);
    }catch(ApiException e){
        //You will get no detailed error message but only the error code SysEnums.SYS_ERR
    }

闲的没事抓个包看看什么原因

parseObject 如果传递的参数不是JSON字符串,那么很有可能该接口返回了一个XML/HTML

就要看看这个究竟是什么。

好处:
1. 分析是调用方的错误,还是API提供方的错误
2. 错误具体原因如果是API提供方的,可以把返回信息反馈给API提供方,并且放心地进行重试。
3. 错误具体原因如果是API调用方的,可以帮助诊断程序错误。

抓包方法

下载Wireshark并安装

如图1-1所示:
wireshark过滤器
图 1-1 使用过滤器

点击过滤器表达式右侧的 + 然后就可以将过滤器表达式保存下来。
还可以点击左侧 过滤器表达式首选项 可以添加多个过滤器。

例如可以抓目标主机为 blog.csdn.net

http.host contains "blog.csdn.net"

抓到的包如下图1-2所示:
wireshark抓包分析
图 1-2 抓包分析

这样选择任意一个HTTP请求,追踪流->HTTP流,然后就可以看该HTTP请求下的每次TCP的请求过程。可以清楚的看到返回的数据,如图1-3所示。

追踪HTTP流
图 1-3 追踪HTTP流

wireshark实用的过滤器表达式

#抓HTTP的请求
tcp.port == 80 || udp.port == 80
#抓某出站请求路径
http.host == "domain.com" and http.request.uri contains "/url/path"
#只抓请求返回
ip.src_host contains "realdomain.com" and http

第一个表达式抓到的HTTP请求非常多,没什么用处
第二个表达式可以抓到本地发送的HTTP请求,并且只关注某个path
第三个表达式可以抓到某API返回的给本机的信息,并且是HTTP层的

注: “realdomain.com”是第二个表达式追踪流查到的目标主机真实的域名

以上。

 

posted @ 2016-11-17 13:18  一杯半盏  阅读(522)  评论(0编辑  收藏  举报