Wireshark网络抓包

一、前言

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

猜你喜欢

转载自blog.csdn.net/songzehao/article/details/125587083