网络协议-HTTP 协议(抓包实战和网络分层)

简介: 网络协议-HTTP 协议(抓包实战和网络分层)

这篇文章主要介绍一下 Wireshark 抓包工具获取到的 HTTP协议 相关的数据,然后对这些数据进行简单的分析,主要目的是更深入的理解 HTTP协议,然后了解一下网络为什么要分层, OSI模型TCP/IP模型的区别。

1.HTTP 协议抓包实战(Wireshark)

1.1 打开 Wireshark 工具,选中正在使用的网卡 以太网4(以自己电脑实际使用为准),点击 捕获,然后选择 选项

1.2 在新窗口中的过滤栏中输入 port 80

Tips:输入 port 80 之后点击 开始即可开始捕获,port 80表示筛选出和 80端口 相关的数据请求。

1.3 打开 Telnet 工具模拟 HTTP 请求:

telnet singwa666.com 80
GET /themes/simpleboot3/portal/public/assets/css/moco.css HTTP/1.1
Host: singwa666.com

如下图所示:

1.4 Telnet 模拟 HTTP 请求之后,点击左上角红色 按钮停止抓取报文:

1.5 找到 WireShark 中抓取到的该条 HTTP 请求的相关报文:

Tips:找到 Telnet 中模拟请求的那条数据 双击

1.6 双击该条HTTP 请求数据:

Tips:如图所示看到的报文信息都是符合基于 ABNF 描述的 HTTP 协议格式规范的。

2.Chrome 抓包:Network 面板分析

2.1  Network 示意图

Tips:从概要可以看出,29 requests 表示 29 个请求,46.9 kB transferred 表示通过网络传输了 46.9KB数据,960 kB resources 表示页面加载了 960KB 的资源,Finish: 421 ms 表示总共完成花了 421 ms 时间,DOMContentLoaded: 201 ms 表示 DOM 内容加载总共消耗 201 msLoad: 376 表示DOM加载消耗了 376 ms

2.2  Network 面板说明

  • 控制器:控制面板的外观和功能
  • 过滤器:过滤请求列表中显示的资源(按住 Ctrl 可以选择过滤多个条件)
  • 概览:显示 HTTP 请求、响应的时间轴
  • 请求列表:默认时间排序,可选择显示列
  • 概要:请求总数、总数据量、总花费时间

2.3  控制器说明

  • 开始抓包
  • 停止抓包
  • 清除请求
  • 要跨页面加载保存请求,比如某个网站页面有跳转时想保留原来的请求列表,可选择该项
  • 停止使用缓存
  • 离线模拟:
  • 模拟其他网速连接:,其中包含了自定义网速
  • 隐藏 Filter 窗格
  • 手动清除缓存:右键点击请求选择 Clear Browser Cache

2.4  过滤器说明

  • 过滤 AllXHRJSCSSImgMediaFontDocWS(WebSocket)ManifestOther 类型。
  • 按住 Ctrl 可以选择过滤多个条件。
  • 按时间过滤:概览面板,拖动滚动条。
  • Hide Data URLs
  • domain:

2.5  请求列表

  • 默认是时间排序
  • 按列排序
  • 按照活动时间排序,Start Time 发出的第一个请求位于顶部,Response Time 开始下载的第一个请求位于顶部,End Time 完成的第一个请求位于顶部,Total Duration 连接设置时间和请求/响应时间最短的请求位于顶部,Latency 等待时间最短响应的请求位于顶部
  • Names:资源名称
  • StatusHTTP 状态码
  • Type:请求的资源的 MIME类型
  • Initiator:发起请求的对象或进程,Parser(解析器)表示 ChromeHTML解析器发起了请求,Redirect(重定向)表示HTTP重定向启动了请求,Script(脚本):脚本启动了请求,Other(其他):一些其他进程或动作发起请求,例如用户点击链接跳转到页面或在地址栏中输入网址


3. OSI 模型

OSI (Open System Interconnection Reference Model)模型是一种理论概念模型,并未真正被实现过,但是在实现网络协议需要参考这种模型,才能更好的去理解网络中的协议和分层:

Tips:应用层解决的是业务问题,表示层负责把网络中的消息转化为应用层可以读写的消息(如TLS/SSL),会话层负责建立会话、握手、维持连接、关闭,传输层解决进程与进程之间的通信,网络层负责ip地址之间建立连接,数据链路层负责局域网中连接 MAC 地址连接到中交换机、路由器等,物理层主要负责信号是如何传递的。

4.TCP/IP 模型

实际在因特网中使用的是 TCP/IP 模型,在 TCP/IP 模型中对 OSI 模型做了很多简化,比如应用层没有对 表示层会话层做严格的区分,数据链路层物理层也没有做严格的区分:

Tips:网络分层中各层只需要负责各层自己所做的事情,不用关心其它层的工作,但会增加额外的数据处理延迟。

5.报文头部

6.抓包分析

下载一个抓包演示用的报文文件,地址 http://www.singwa666.com/demo.pcapng

6.1 首先用 WireShark 打开报文文件,并且用 http 过滤:

6.2 点开其中的一条进行分析:

6.3 点开 Ethernet II 可以看到数据链路层相关的数据:

Tips:以太网层展示了 MAC 地址相关信息。

6.4 点开 Internet Protocol ... 可以看到 IP层 相关的数据:

6.5 点开 Transmission Control Protocol ... 可以看到 TCP层 相关的数据:

6.6 点开 Hypertext Transfer Protocol 可以看到 应用层 HTTP 相关的数据:

相关文章
|
7天前
|
监控 安全 搜索推荐
设置 HTTPS 协议以确保数据传输的安全性
设置 HTTPS 协议以确保数据传输的安全性
|
3天前
|
SQL 安全 算法
网络安全的盾牌与剑:漏洞防御与加密技术的实战应用
【9月更文挑战第30天】在数字时代的浪潮中,网络安全成为守护信息资产的关键防线。本文深入浅出地探讨了网络安全中的两大核心议题——安全漏洞与加密技术,并辅以实例和代码演示,旨在提升公众的安全意识和技术防护能力。
|
5天前
|
安全 网络协议 网络安全
在实现HTTPS时,有哪些常见的安全协议
在实现HTTPS时,有哪些常见的安全协议
|
13天前
|
网络协议 Python
告别网络编程迷雾!Python Socket编程基础与实战,让你秒变网络达人!
在网络编程的世界里,Socket编程是连接数据与服务的关键桥梁。对于初学者,这往往是最棘手的部分。本文将用Python带你轻松入门Socket编程,从创建TCP服务器与客户端的基础搭建,到处理并发连接的实战技巧,逐步揭开网络编程的神秘面纱。通过具体的代码示例,我们将掌握Socket的基本概念与操作,让你成为网络编程的高手。无论是简单的数据传输还是复杂的并发处理,Python都能助你一臂之力。希望这篇文章成为你网络编程旅程的良好开端。
35 3
|
13天前
|
数据采集 JSON API
🎓Python网络请求新手指南:requests库带你轻松玩转HTTP协议
本文介绍Python网络编程中不可或缺的HTTP协议基础,并以requests库为例,详细讲解如何执行GET与POST请求、处理响应及自定义请求头等操作。通过简洁易懂的代码示例,帮助初学者快速掌握网络爬虫与API开发所需的关键技能。无论是安装配置还是会话管理,requests库均提供了强大而直观的接口,助力读者轻松应对各类网络编程任务。
53 3
|
14天前
|
机器学习/深度学习 JSON API
HTTP协议实战演练场:Python requests库助你成为网络数据抓取大师
在数据驱动的时代,网络数据抓取对于数据分析、机器学习等至关重要。HTTP协议作为互联网通信的基石,其重要性不言而喻。Python的`requests`库凭借简洁的API和强大的功能,成为网络数据抓取的利器。本文将通过实战演练展示如何使用`requests`库进行数据抓取,包括发送GET/POST请求、处理JSON响应及添加自定义请求头等。首先,请确保已安装`requests`库,可通过`pip install requests`进行安装。接下来,我们将逐一介绍如何利用`requests`库探索网络世界,助你成为数据抓取大师。在实践过程中,务必遵守相关法律法规和网站使用条款,做到技术与道德并重。
28 2
|
存储 Web App开发 监控
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
我们以前使用过的对hbase和hdfs进行健康检查,及剩余hdfs容量告警,简单易用 1.针对hadoop2的脚本: #/bin/bashbin=`dirname $0`bin=`cd $bin;pwd`STATE_OK=...
1044 0
|
Web App开发 前端开发 Java
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html><head><meta http-equiv="Cont
线程的状态有:new、runnable、running、waiting、timed_waiting、blocked、dead 当执行new Thread(Runnabler)后,新创建出来的线程处于new状态,这种线程不可能执行 当执行thread.start()后,线程处于runnable状态,这种情况下只要得到CPU,就可以开始执行了。
720 0
下一篇
无影云桌面