有时候,因为网络隔离的原因,我们无法直接访问web站点,而需要通过如ssh tunnel的方式去访问。
例如在Linux下可以直接在终端运行
ssh -L 9043:localhost:9043 username@remotehost
在windows下则可以在putty中设置ssl tunnels,此时我们可以看到本机127.0.0.1上有端口监听。
我们可以在浏览器中直接通过 https://localhost 访问到 https://remotehost的内容。
但是这个时候如果你需要用wireshark去抓取网络数据作分析,你会发现你抓到的是22端口的SSH数据,而不是443端口的HTTPS数据,因而无法分析web站点的HTTP连接问题。
那要怎样才能抓到HTTP协议的数据呢?其实我们在浏览器访问的是localhost,所以需要抓的是loopback(127.0.0.1)这个网卡的数据,而不是系统默认网卡。在Linux下是eth0,在windows下是Local Area Connection。
这时候又碰到另一个问题了,wireshark在windows下抓不了127.0.0.1的包,怎么办?可以参考wireshark官网的这个介绍
https://wiki.wireshark.org/CaptureSetup/Loopback
这篇文章介绍了多种方法,简单起见,我选择了RawCap。详细介绍可以参考点击打开链接,下载页面在此。
RawCap使用很简单,下载后无需安装,直接用administrator运行cmd然后切换到RawCap所在目录,直接运行RawCap即可。
如下,直接运行RawCap.exe,选择Lookback接口,输入输出文件名。
此处有个小插曲,我运行RawCap之后访问https://localhost,但是发现抓不到任何数据包,只有通过https://127.0.0.1访问时才能正常抓取数据包,具体为何我也没有深究。
在Linux下则很简单,可以直接用tcpdump抓取loopback的数据包。"-i lo"表示loopback接口。
tcpdump -i lo -w tcpdump.pcap
抓取到的数据保存到文件,然后就可以用wireshark打开分析了,如图