一文带你跟踪HTTP协议

Hi,我是小希。今天我们抓个包,虽然说着 很容易,做起来想搞懂还是挺费劲的。哈哈,wireshark 大家不知道熟不熟悉它?没错,一款免费且高效的开源的抓包工具。很丝滑的感觉,你还可以根据自己的需求对其源码定制的来用,废话少说。

一文带你跟踪HTTP协议

一准备工作

如果你有兴趣的,自己动手跟着做,你才会掌握到。

在安装 ENSP 的时候已经配套的安了 Wireshark 软件,比如这个东西 WinPcap,省事呢一路下一步就好,所以直接去找到以管理员打开运行。
一文带你跟踪HTTP协议

请按 F 键进入 csgo, 啊呸,不是这个啊。我打不来游戏,心里只有奥利给,好了你打开之后大概长这样。
一文带你跟踪HTTP协议

在菜单栏看到 捕获->开始 没有,选择网卡。这里需要根据各自网卡的使用情况决定。

简单的办法是到windows命令行输入 ipconfig 可以看下自己使用的网卡,我自己是 WLAN

一文带你跟踪HTTP协议

就在下面选, 正在上网的网卡,就行了。又回到 捕获 看下有没有选的网卡,如果有
一文带你跟踪HTTP协议

选它点击 开始 启动抓包。

一文带你跟踪HTTP协议

启动后,在处于在弹出对话框后停几秒,会发现某个条目上的 Packets 数量会不断地涨,这个什么意思呢。说明这个口子是你电脑所用的上网的口,我们后面根据它来捕获和分析它所发送和接收的数据包。

一文带你跟踪HTTP协议

如果你不太确定,你看下 IP 这栏的数字,发现了没,这其实是 IPv6 地址,我们点击后会发现熟悉的 IPv4 地址,和你用 ipconfig 查出来的主机地址那是一毛一样。过了几秒钟发现数字更多了,说明我们的计算机正源源不断地和互联网在交互数据:
一文带你跟踪HTTP协议
如上图,你在点击 Details ,可以看详细的发送接收数据和统计信息。你看用红色标识的是共接收和发送了多少 packets 等。

我们点 start 按钮,开始捕获数据包,可以捕获窗口里看到点击按钮之后电脑所有发送和接受到的报文。

一文带你跟踪HTTP协议

上图的三个面板以表格形式展示当前捕获的所有数据包。

不到1分钟,已经有600多个数据包了,表示的是当前本机正在上网,现在已经打开了多个网页;

1 介绍面板区域

  • Packet Detail (列表): 它包括数据包的帧格式,捕获的时间,数据包的源 IP 地址和目标 IP 地址,所使用的最高层次的协议类型以及你信息的摘要。
  • Packet Detail (细节):中间的显示的是数据包的细节内容。各个层次你都可以看一下,按照需要查看这个数据包的全部内容。
  • Packet Bytes (字节): 最下面区域是一个数据包未经处理的原始状态。信息使用16进制表示。当大家需要深入数据包内部研究网络协议的时候可以使用这部分内容,为什么?因为在 Packet Detail面板 一般只显示数据包头部信息。

那假如你想保存怎么办? 你先停掉捕获在菜单中选择 File->SaveAs 进行文件的保存。

一文带你跟踪HTTP协议

假如我只想显示 http 协议的包,如下图
一文带你跟踪HTTP协议
不对啊,怎么没有呢?怎么抓也抓不到我想要的 http 包而且抓到的 http 都很少,连页面的 HTML 包都抓不到。
浏览器都能抓到这么多 http 包,强大的 Wireshark 怎么会抓不到 http 包呢,觉得自己的 Wireshark 或者 网卡 坏掉了。

一文带你跟踪HTTP协议

小猫猫,不用担心。我们现在抓的服务器都是 https 加密的链接,Wireshark 如果没有再次设置的情况下是没有办法抓到 https 的数据包。所以那些 HTML 数据包也是靠 https 加密传输的,怪不得我们抓不到网站的数据包。

方法很简单,,在任意一个盘符下,建立以下文件目录,例如:C:\ssl_key\sslog.log,在系统变量中添加一行,变量名为 SSLKEYLOGFILE,而变量值为 C:\ssl_key\sslog.log

出现这种原因,我总结如下:

(1)Wireshark 它不知道客户端/服务器私钥,所以无法解密 https 传输的数据包。

(2)某些浏览器如 Firefox 和 Chrome 支持将 TLS 会话中使用的客户端私钥/服务器端公钥用日记文件的方式记录下来,这样就可供我们 Wireshark 加密/解密使用。

(3)为什么 log 文件会有很多行呢?因为客户端它每次通信的时候都会随机生成一个私钥和服务器通信的!

2 详细做法

下面的过程,基于 windows 10

1) 创建文件 sslog.log,比如在 C 盘下,跟上面一样创建文件 C:\ssl_key\sslog.log
一文带你跟踪HTTP协议
2)添加环境变量
一文带你跟踪HTTP协议
3)设置Wireshark
一文带你跟踪HTTP协议!
20
填入设置的文件路径后,确认。Wireshark 的 https 抓包设置完成。
一文带你跟踪HTTP协议
4)重启浏览器,再次启动 Wireshark 进行抓包

3 进行测试

让我们对比来看,设置和没设置 ssl 的区别:

测试网站:B站

测试视频:av62553173

浏览器抓包:
一文带你跟踪HTTP协议

  • 未设置
    一文带你跟踪HTTP协议
  • 已设置
    一文带你跟踪HTTP协议
    这个小知识点,你理解了没有,动手做一下吧。

二如何用 显示过滤器

它作用的对象是捕获的数据包集合,用来指示符合条件的数据包。 你可以在第一个区域 Packet List 上方的 Filter文本框 中编辑输入一个,如果语法正确,输入框会变成绿色,错误是红色。如果你按下 Apply按钮 可以从所有数据包中过滤出符合条件的报文,显示在 packets list 中。

一文带你跟踪HTTP协议

显示过滤器的构造语法有比较操作符,逻辑操作符以及搜索操作符等。 比较操作符可以进行值的比较。 而逻辑操作符可以用多个过滤条件。我们这个软件提供了搜索和匹配操作符。

1 比较操作符

一文带你跟踪HTTP协议

2 逻辑操作符

一文带你跟踪HTTP协议

3 匹配操作符

一文带你跟踪HTTP协议

现在你现在可以构造属于自己的过滤器了。TCP/IP 协议 中能够用来构造显示过滤器的最重要的两种元素是协议名称和协议头字段的名称。协议名称譬如 http ip tcp 等。协议头部的字段,比如 ip.addr tcp.flags.ack等。你看下旁边的 Clear,我想你已经猜到了,功能就是清除过滤条件,点了之后呢,又恢复到之前的所有的数据包。

三 开始执行抓包

cmd 输入 ping www.baidu.com, 操作完成后相关的数据包就抓取到了。
一文带你跟踪HTTP协议
最新的数据包表示:
一文带你跟踪HTTP协议
查下目的IP在哪里
一文带你跟踪HTTP协议
本机和 39.156.66.18 之间交互的,百度一下此IP,如下图;这个应该是百度在北京的IP;
看到我们的这个包是 http 269;
这表示服务器已成功处理了请求。通常,这表示服务器提供了请求的网页:

GET /socket.io/1/xhr-polling/g6BvKEWe5k1WjFgt595_?t=1427092879908

这一段是握手后的 socket.io 的请求;表明浏览器已经使用了新的 HTML5 的 websocket技术;

查看一下本机的IP,网关,DNS等参数;控制面板-网络和共享中心-WALN-详细信息,显示如下图的本机IP配置信息;
一文带你跟踪HTTP协议
找下电脑上网关所对应的数据包是多少
一文带你跟踪HTTP协议

1 建立三次握手过程

一文带你跟踪HTTP协议

输入tcp.flags.syn==1或tcp.flags.syn==0x02 过滤一下;这两个表达式结果是一样的;

如果你输入的是前一个,是单个的 SYN,它表示的是建立连接; SYNACK 同时为1,它表示的就是建立连接之后的响应;

下图显示的是2个完整 TCP 连接在建立;

一文带你跟踪HTTP协议

一文带你跟踪HTTP协议

看一下第二个连接,其包号为446;列出包号为446、447、459的三个包看一下,其内容为:

SYN

SYN+ACK

ACK

果然这是一个 TCP 连接的建立过程;前两个上面说了,第三个 ACK 是第三次握手的确认;到此一个 TCP 连接建立了;之后才可以进行 HTTP协议 的收发;大功告成了。

我们再捕获一次,然后停止再分析;

输入如下图的表达式,去除掉 ip 中包含本机 IP 和 192.168.1.250 的包,看下有些什么;发现有很多广播包;这些都是底层的ARP协议,它在TCP之下一层的;
一文带你跟踪HTTP协议

2 进行一次 HTTP 请求和饷应

过滤器中输入 “http.request.method == GET” 就可以在捕获的数据中仅显示 HTTP GET 数据包。

一文带你跟踪HTTP协议

点击Apply, 随便浏览一个网站,就可以在 package list 看到所有捕获的包。

仔细观察的小伙伴可能已经看到了 info字段,选择 GET字段的数据包,右键选 “Follow TCP Stream” 跟踪 HTTP流。

一文带你跟踪HTTP协议

一文带你跟踪HTTP协议

HTTP 消息头部是用普通的ASCII文本书写的。

3 红色子体是啥子呢?

它叫请求信息

在我们这个请求信息的第一行叫请求行,后面的行叫首部行。

  • 请求行有3个字段:方法段,URL字段 和 HTTP协议版本字段。方法字段可以取GET POST HEAD PUT 和DELETE。当我们浏览器请求一个对象时,使用GET方法,在URL字段填写该对象的URL。
  • 首部行 Host 定义了目标所在的主机(即网站)。 通过包含 connection: Keep Alive首部行,我们的浏览器告诉你服务器希望你使用持久连接。 User-agent:首部行用来定义用户想要获得对象的语言版本。

4 蓝色字体是什么?

它叫饷应消息:初始状态行,首部行,然后是实体来组成。

  • 状态行有三个字段:协议版本,状态码和相应状态信息。
  • 首部行,他指示的是服务器产生并发送该饷应信息的日期和时间。
  • 实体,包 含的是你所请求的对象。

另外,跟踪了请求和饷应流之后,过滤器条件会被自动更改,注意根据自己的需求进行重置。

5 了解HTTP的cookie机制

我们的HTTP本身是无状态的,不支持服务端保存客户端浏览器的状态这些信息。但是在某些电子商务等应用类事务中,服务器需要跟踪并保持你客户端的状态信息怎么办?就用到的它 cookie。

Cookie 基本有四部分组成,其中包括 web服务器 HTTP饷应消息中的 set-cookie首部行 和 用户浏览器请求消息中的cookie首部行。由于大部分的网站都使用了 Cookie,因此捕获一次 Cookie 交互的数据包是非常的容易。

在 Wireshark 显示过滤器中输入 http matches "Set-Cookie",在浏览器中访问网站,如 www.sohu.com。

正是 Set-cookie 关键字后面跟着的字符串,泄露了大家的隐私。这个字符串将会一直保留在硬盘的某个地方直到你删除它。

IE浏览器的 Cookie 数据存放在临时文件目录里面,不同 windows 版本路径稍有不同。如果你是谷歌 Chrome 浏览器可以在其浏览器地址栏输入 “chrome//settings/” 进入设置->高级页面。
一文带你跟踪HTTP协议

6 来获取用户名和密码

我们待会儿用 Wireshark 要在几千条数据中找到你要的那个网站,首先你需要过滤,所以我们先查看该网站的 ip,如何知道呢?很容易,在 cmdping 一下,便得知到 ip。如下所示:
一文带你跟踪HTTP协议
启动 Wireshark,勾选你所在的网络,然后我们就能收到源源不断的数据包了。
一文带你跟踪HTTP协议
我们点暂停,填写过滤器,并点击右边的Apply(应用),然后重新开始捕获,像这样,页面就干净很多,准备抓包了。过滤器内容:http and ip.addr==你的ip
一文带你跟踪HTTP协议
第四步、登陆后台,抓取登录数据包

点击开始抓包按钮(绿色的),打开后台登录地址,填写账号密码,点击登录
一文带你跟踪HTTP协议

立即查看 Wireshark 界面,可以看到有一条 POST 方式的登录的数据包(第一条)
一文带你跟踪HTTP协议
第五步、查看数据包

单击打开这条数据包,可以看到下图内容
一文带你跟踪HTTP协议
打开最后一行数据,博主的账号和密码就在里面呢,快来围观吧
一文带你跟踪HTTP协议
到这,我们成功在网站上抓到自己的登录账号和密码,当然,打开也可以试试抓抓同一局域网的账号和密码哦,因为你们是同一个 wifi 下,能轻松抓到数据包,只要你知道他登录的网站的 ip,在同一时间段基本可以抓到数据包,账号和密码也就一览无余啦。

上一篇:java中的字符串相关知识整理


下一篇:linux安装python