一、前言
研究各个网络协议以及本地远程抓包分析,少不了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,代表被加密。