一、前言
研究各个网络协议以及本地远程抓包分析,少不了Wireshark 或同类工具。 这里对3种场景做个简单的抓包。
二、3个抓包场景
2.1、抓包本地http
首先设置Wireshark过滤器ip.dst == 124.223.54.92 and tcp.port == 8116 ,开始捕获。 然后打开PC(本地IP:192.168.0.102)的浏览器,访问一个自己练手的的中医药信息网站:http://124.223.54.92:8116/,并搜索“神医喜来乐”, 如上搜索到一些相关结果,再来查看Wireshark捕获的内容, 只能看到浏览器->服务器的单向请求(No=64,左侧箭头→ 代表src->dst即客户端192.168.0.102->服务端124.223.54.92的请求),捕获不到相应数据。 如果想拿到响应,下面将过滤器改为ip.addr == 124.223.54.92 and tcp.port == 8116 (ip.addr代表src或dst都可以是这个ip),应用新过滤器后查看捕获结果如下, No=108,左侧箭头← 代表source->dest即服务端124.223.54.92->客户端192.168.0.102的响应。 前面的搜索请求是GET请求,接着再试一下POST请求http://124.223.54.92:8116/api/echo,这个echo接口请求体传什么响应就返回什么,如下,
curl --location --request POST 'http://124.223.54.92:8116/api/echo' \
--header 'Content-Type: text/plain' \
--data-raw '{
"name": "Jay"
}'
同样去Wireshark看到对应的req和resp,以及下面也可以看到明文的业务响应数据,
2.2、抓包手机http
在PC的Wireshark上不能直接抓包手机流量,尽管PC和手机连的都是同一个WIFI。因为Wireshark抓包需要先选择监控的网卡,与这张网卡相关,或经过这张所选网卡的流量或网络包才会被抓到。所以如果对手机抓包,很显然应该监控的是手机的网卡,或者服务端的网卡。所以不能直接在PC上对手机抓包。
不过也有2种方法,
- 其一,PC上开个共享热点让手机连
- 其二,在PC上使用
Charles 等工具开启网络代理,并在手机对应设置该代理
这里使用第二种方式,第一步,下载安装好Charles 后,设置Proxy->Proxy Settings->HTTP Proxy 的Port=8888,如下, 第二步,手机连到跟PC同一个WIFI下,在所连WIFI中设置代理主机名为PC的ip,代理端口为Charles设置的8888,如下, 这样设置代理后,手机的流量就跑去PC代理了,不再是直接发送到路由器。 上图已经可以得知手机的ip是192.168.0.100,所以在Wireshark设置过滤器ip.addr == 192.168.0.100 ,并开始捕获。 接着同样打开手机浏览器访问http://124.223.54.92:8116/,并搜索, 再回到Wireshark查看是否已经捕获到信息,如下No=43,捕获到了请求, 如下No=153,也捕获到了响应, 同样,Charles 本身作为与Wireshark同类工具,也同时获取到了该请求及响应,如下,
2.3、远程抓包
上述2.1和2.2分别举例了对本地和手机抓包,对手机抓包也算是属于远程抓包的一种场景,但是仍需和PC在同一局域网下,所以可以认为不算是完全的远程。 那肯定还有一种完全远程的场景,比如远程服务器192.168.2.15上的a进程,需要不断和远程服务器192.168.2.22上的b进程进行p2p握手通讯,这种情况下假如需要验证2个进程之间的握手是加密的还是未加密的,应该怎么验证。 说明:a进程和b进程用来握手的p2p端口都是34000。 第一步,在192.168.2.15上使用tcpdump 命令,将与192.168.2.22之间的tcp包都保存到cap文件,
tcpdump tcp port 34000 and host 192.168.2.22 -w ./target.cap
第二步,将cap文件放到本地PC,并导入Wireshark分析,如下,可以看到两个进程之间的p2p握手协议是TLSv1.2加密的,报文内容也是显示为Application Data,代表被加密。
|