协议头,wireshark,http

目录

协议头

ip头

udp头

mac层

网络工具 telnet wireshark

Http

一、HTTP 协议介绍

二、HTTP 协议的工作过程

三、使用抓包工具抓取报文

四、获取到http请求报文:

五、http请求(request)

(一)、认识URL

项目:天气预报


协议头

ip头

(1)版本 占4位,指IP协议的版本。通信双方使用的IP协议版本必须一致。目前广泛使用的IP协议版本号为4(即IPv4)。关于IPv6,目前还处于草案阶段。

(2)首部长度 占4位,可表示的最大十进制数值是15。请注意,这个字段所表示数的单位是32位字长(1个32位字长是4字节),因此,当IP的首部长度为1111时(即十进制的15),首部长度就达到60字节。当IP分组的首部长度不是4字节的整数倍时,必须利用最后的填充字段加以填充。因此数据部分永远在4字节的整数倍开始,这样在实现IP协议时较为方便。首部长度限制为60字节的缺点是有时可能不够用。但这样做是希望用户尽量减少开销。最常用的首部长度就是20字节(即首部长度为0101),这时不使用任何选项。

(3)区分服务 占8位,用来获得更好的服务。这个字段在旧标准中叫做服务类型,但实际上一直没有被使用过。1998年IETF把这个字段改名为区分服务DS(Differentiated Services)。只有在使用区分服务时,这个字段才起作用。

(4)总长度 总长度指首部和数据之和的长度,单位为字节。总长度字段为16位,因此数据报的最大长度为216-1=65535字节。

在IP层下面的每一种数据链路层都有自己的帧格式,其中包括帧格式中的数据字段的最大长度,这称为最大传送单元MTU(Maximum Transfer Unit)。当一个数据报封装成链路层的帧时,此数据报的总长度(即首部加上数据部分)一定不能超过下面的数据链路层的MTU值。

(5)标识(identification) 占16位。IP软件在存储器中维持一个计数器,每产生一个数据报,计数器就加1,并将此值赋给标识字段。但这个“标识”并不是序号,因为IP是无连接服务,数据报不存在按序接收的问题。当数据报由于长度超过网络的MTU而必须分片时,这个标识字段的值就被复制到所有的数据报的标识字段中。相同的标识字段的值使分片后的各数据报片最后能正确地重装成为原来的数据报。

(6)标志(flag) 占3位,但目前只有2位有意义。

● 标志字段中的最低位记为MF(More Fragment)。MF=1即表示后面“还有分片”的数据报。MF=0表示这已是若干数据报片中的最后一个

● 标志字段中间的一位记为DF(Don’t Fragment),意思是“不能分片”。只有当DF=0时才允许分片。

(7)片偏移 占13位。片偏移指出:较长的分组在分片后,某片在原分组中的相对位置。也就是说,相对用户数据字段的起点,该片从何处开始。片偏移以8个字节为偏移单位。这就是说,每个分片的长度一定是8字节(64位)的整数倍。

(8)生存时间 占8位,生存时间字段常用的的英文缩写是TTL(Time To Live),表明是数据报在网络中的寿命。由发出数据报的源点设置这个字段。其目的是防止无法交付的数据报无限制地在因特网中兜圈子,因而白白消耗网络资源。最初的设计是以秒作为TTL的单位。每经过一个路由器时,就把TTL减去数据报在路由器消耗掉的一段时间。若数据报在路由器消耗的时间小于1秒,就把TTL值减1。当TTL值为0时,就丢弃这个数据报。

(9)协议 占8位,协议字段指出此数据报携带的数据是使用何种协议,以便使目的主机的IP层知道应将数据部分上交给哪个处理过程。

(10)首部检验和 占16位。这个字段只检验数据报的首部,但不包括数据部分。这是因为数据报每经过一个路由器,路由器都要重新计算一下首部检验和(一些字段,如生存时间、标志、片偏移等都可能发生变化)。不检验数据部分可减少计算的工作量。

(11)源IP地址 占32位。

(12)目的IP地址 占32位。

udp头

用户数据报UDP有两个字段:数据字段和首部字段。首部字段很简单,只有8个字节(图 5-5),由四个字段组成,每个字段的长度都是两个字节。各字段意义如下:

(1)源端口 源端口号。在需要对方回信时选用。不需要时可用全0。用于标识发送方的端口。

(2)目的端口 目的端口号。这在终点交付报文时必须要使用到。用于标识接收方的端口。

(3)长度 UDP用户数据报的长度,其最小值是8(仅有首部)。表示UDP头部和数据的总长度。

(4)校验和 检测 UDP用户数据报在传输中是否有错。有错就丢弃。用于检验UDP头部和数据在传输过程中是否发生了错误。虽然是可选的,但推荐使用以增加数据传输的可靠性。

mac层

VLAN 标记字段的长度是4字节,插入在以太网MAC 帧的源地址字段和类型字段之间。VLAN 标记的前两个字节总是设置为0x8100(即二进制的1000000100000000),称为IEEE 802.1Q 标记类型。当数据链路层检测到 MAC 帧的源地址字段后面的两个字节的值是0x8100时,就知道现在插入了4字节的VLAN标记。于是就接着检查后面两个字节的内容。在后面的两个字节中,前3位是用户优先级字段,接着的一位是规范格式指示符CFI(Canonical Format Indicator)",最后的12位是该虚拟局域网VLAN标识符 VID(VLANID),它唯一地标志了这个以太网帧是属于哪一个 VLAN。由于用于 VLAN 的以太网帧的首部增加了4个字节,因此以太网的最大长度从原来的1518字节(1500字节的数据加上18字节的首部)变为1522字节。

网络工具 telnet wireshark

常用网络测试工具

telnet netstat ping arp wireshark tcpdump

sudo ufw disable

sudo apt-get install openssh-server openssh-client

sudo apt-get install wireshark

1、telnet 远程登录工具,默认都是系统安装。

sudo ufw disable//关闭防火墙

sudo ufw status//查看防火墙状态

sudo apt-get install openssh-server openssh-client//下载远程登陆工具ssh,客户端和服务端一起下载

使用格式: telnet ip地址 端口

eg: telnet 192.168.1.1 8888

注意:如果没有写端口,则默认登录23 号端口。

2、netstat 测试查看网络端口使用情况

netstat -anp

netstat -n ===>列出当前所有网络端口使用情况

netstat -n -t ===>列出所有TCP通信的端口信息

netstat -n -u ===>列出所有UDP通信的端口信息

netstat -n -i ===>列出默认接口上的通信信息

netstat -lnp |grep 8888 ===>查看指定端口上的通信详情

3、ping 命令 测试网路的联通状况

ping ip地址

ping 域名

4、arp 地址解析命令

arp -an ===>列出当前主机的地址ARP表

arp -d ip地址

5、wireshark 抓包工具 tcp.port == 50000 && tcp.ip == 192.168.0.183

sudo apt-get install wireshark//下载wireshark,网络抓包工具。启动的时候在命令行使用sudo wireshark运行,不然权限不足,影响后续的网络抓包

step:1

step:2

换网关:

step:3

复制内容,右键->copy->as printable Text

过滤规则:

1、根据ip地址过滤:ip.src == x.x.x.x

ip.dst == x.x.x.x

2、根据端口过滤:tcp.srcport == xx;

tcp.dstport == xx;

udp.srcport == xx;

udp.dstport == xx;

3、根据协议类型过滤:

tcp udp icmp .....

4、任意组合以上条件抓包:

如果与的关系: and

ip.src == 192.168.1.100 and tcp.dstport == 9999

如果或关系 : or

ip.src == 192.168.1.100 or ip.dst == 192.168.1.102

tcp host 192.168.1.100

Http

一、HTTP 协议介绍

基本介绍:

HTTP(Hyper Text Transfer Protocol): 全称超文本传输协议,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP 是一种应用层协议,是基于 TCP/IP 通信协议来传递数据的,其中 HTTP1.0、HTTP1.1、HTTP2.0 均为 TCP 实现,HTTP3.0 基于 UDP 实现。现主流使用 HTTP1.0 和 HTTP3.0

协议: 为了使数据在网络上从源头到达目的,网络通信的参与方必须遵循相同的规则,这套规则称为协议,它最终体现为在网络上传输的数据包的格式。

通俗点讲,协议就是要保证网络通信的双方,能够互相对接上号。就像是两个人传递纸条通过互相指定的暗号,如果发送天亮了,表示可以打游戏了等等

注意: 当我们访问一些网页时,是显示通过 HTTPS 来进行通信的,并且当下大多数的网页都是通过 HTTPS 来进行通信的,因为 HTTPS 在 HTTP 的基础上做了一个加密的工作。HTTPS 将在本文末尾具体介绍

二、HTTP 协议的工作过程

当我们在浏览器输入一个网址,此时浏览器就会给对应的服务器发送一个 HTTP 请求,对应的服务器收到这个请求之后,经过计算处理,就会返回一个 HTTP 响应。并且当我们访问一个网站时,可能涉及不止一次的 HTTP 请求和响应的交互过程。

基础术语:

客户端: 主动发起网络请求的一端

服务器: 被动接收网络请求的一端

请求: 客户端给服务器发送的数据

响应: 服务器给客户端返回的数据

HTTP 协议的重要特点: 一发一收,一问一答

注意: 网络编程中,除了一发一收之外,还有其它的模式

多发一收:例如上传大文件

一发多收:例如看直播时,搜索一个词条可以得到多个视频源

多发多收:例如串流(steam link、moonlight 等等)

三、使用抓包工具抓取报文

wireshark,或者浏览器自带的f12

四、获取到http请求报文:

GET /?app=weather.today&cityNm=%E6%88%90%E9%83%BD&appkey=73908&sign=0b3399b07636fe2db150dbcb93a221cf&format=json HTTP/1.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Cache-Control: max-age=0
Connection: keep-alive
Host: api.k780.com
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36 Edg/128.0.0.0

会得到http响应报文,及响应文档,有时会一起发过来,有时会分段发送过来

五、http请求(request)

(一)、认识URL

URL(统一资源定位符,Uniform Resource Locator)是用来在Web上标识和定位资源的地址。HTTP请求中的URL包含了有关资源的详细信息,使得客户端能够准确地访问所需的资源。URL由多个部分组成,每部分都有其特定的功能和含义。下面是对URL各个组成部分的详细介绍:

URL的组成部分

  1. 协议(Scheme)

    1. 定义: 指定用于访问资源的协议或方式。

    2. 格式: scheme://

    3. 示例: http://https://ftp://等。

    4. 作用: 指定如何获取资源。HTTP和HTTPS是最常见的协议,用于Web资源的访问。

  2. 主机(Host)

    1. 定义: 资源所在的服务器的域名或IP地址。

    2. 格式: host

    3. 示例: www.example.com192.168.1.1

    4. 作用: 确定要访问的服务器的地址。

  3. 端口(Port)

    1. 定义: 服务器上用于接收请求的端口号(可选)。

    2. 格式: :port

    3. 示例: :80(HTTP的默认端口),:443(HTTPS的默认端口)。

    4. 作用: 指定服务器上的具体端口,以便客户端可以正确地连接到服务。通常情况下,端口号在默认值时可以省略。

  4. 路径(Path)

    1. 定义: 服务器上资源的具体位置。

    2. 格式: /path/to/resource

    3. 示例: /index.html/images/pic.jpg

    4. 作用: 确定资源在服务器上的位置。路径通常反映了服务器上的文件结构。

  5. 查询字符串(Query String)

    1. 定义: 附加到URL末尾的键值对,用于传递额外的参数。

    2. 格式: ?key1=value1&key2=value2

    3. 示例: ?search=chatGPT&page=1

    4. 作用: 用于传递数据给服务器,例如表单提交数据或动态请求参数。查询字符串由键值对组成,键和值通过等号=连接,不同的键值对通过&分隔。

  6. 片段标识符(Fragment Identifier)

      eg:

    https://www.example.com:8080/path/to/resource?query1=value1&query2=value2#section
    1. 定义: 用于标识文档中的特定部分。

    2. 格式: #fragment

    3. 示例: #section1#top

    4. 作用: 通常用于页面内的导航,告诉浏览器滚动到特定的位置或内容。片段标识符不会发送到服务器,它只对客户端有效。

  • 协议: https

  • 主机: www.example.com

  • 端口: 8080

  • 路径: /path/to/resource

  • 查询字符串: query1=value1&query2=value2

  • 片段标识符: #section

项目:天气预报

在接收服务器发送的数据的时候,可能会出现网络波动,导致服务器多次发送(keep-alive 长链接,不立刻断开,大部分服务器是两分钟断开),而我们大部分写出的程序都是只有一个recv

所以针对这种情况有四种解决方案

(1)延时接收sleep(3);

(2)循环recv,拼接,判断"0\r\n"结束标志,弹出循环

(3)请求报文为keep-alive长连接,改为close短链接,服务器就会先断开

(4)timeout超时处理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/52465.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如果 Android 手机出现数据丢失,如何在Android上恢复丢失的数据

当您的 Android 手机发生数据丢失时,您可能需要检索丢失的文件。为了帮助您完成此过程,以下是执行 Android 数据恢复的一些有效方法: 如何在Android上检索数据 如果您的 Android 手机出现数据丢失,您可能需要检索丢失的文件。为了…

OpenWRT有三个地方设置DNS,究竟设置哪个地方会更好?

前言 刚上手OpenWRT软路由系统的小伙伴或许都会有这样的疑问:OpenWRT这个系统有三个地方是设置DNS的,究竟设置哪一个才是正确的? 这个还得从实际应用说起。 一般来说,咱们在使用路由器的时候,DNS都是默认运营商的DN…

前端框架大观:探索现代Web开发的基石

目录 引言 一、前端框架概述 二、主流前端框架介绍 2.1 React 2.1.1 简介 2.1.2 特点 2.1.3 代码示例 2.2 Vue.js 2.2.1 简介 2.2.2 特点 2.2.3 代码示例 2.3 Angular 2.3.1 简介 2.3.2 特点 2.3.3 代码示例 三、其他前端框架与库 四、前端框架的选择 五、结…

计算机毕业设计选题推荐-自驾游攻略管理系统-Java/Python项目实战

✨作者主页:IT研究室✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Python…

CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。

CentOs7 解决yum更新源报错:[Errno 14] HTTP Error 404 - Not Found 正在尝试其它镜像。 前言问题解决方法: 前言 遇到这个问题大概率是镜像源的问题可以参照这篇文章的内容试一下 镜像源问题相关解决方法 根据自己的情况对症下药,如果还不…

LAMP环境下项目部署

目录 1、创建一台虚拟机 centos 源的配置 备份源 修改源 重新加载缓存 安装软件 2、关闭防火墙和selinux 查看防火墙状态 关闭防火墙 查看SELinux的状态 临时关闭防火墙 永久关闭SELinux:编辑SELinux的配置文件 配置文件的修改内容 3、检查系统中是否…

计算机毕业设计 家校互联管理系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

单片机-STM32 看门狗(八)

目录 一、看门狗概念 1、定义: 二、单片机中的看门狗 1、功能描述: 2、看门狗设置部分 预分频寄存器(IWDG_PR) 3、窗口看门狗 特性: 4、看门狗配置: 一、看门狗概念 看门狗--定时器(不属于基本定时器、通用定…

svg图标的使用

图片的格式有很多,前端经常使用的有以下类型:jpg,jpeg,png,gif,svg,这篇文章将简单svg的情况,以及项目中如何使用和配置svg图标 目录 什么是svg图标 SVG图标的优缺点 优点 缺点 svg前端使用场景 SVG在代码中的使用 简单使用创建svg 作为图标引入…

udp网络通信 socket

套接字是实现进程间通信的编程。IP可以标定主机在全网的唯一性,端口可以标定进程在主机的唯一性,那么socket通过IP端口号就可以让两个在全网唯一标定的进程进行通信。 套接字有三种: 域间套接字:实现主机内部的进程通信的编程 …

yolov5 +gui界面+单目测距 实现对图片视频摄像头的测距

可实现对图片,视频,摄像头的检测 项目概述 本项目旨在实现一个集成了YOLOv5目标检测算法、图形用户界面(GUI)以及单目测距功能的系统。该系统能够对图片、视频或实时摄像头输入进行目标检测,并估算目标的距离。通过…

Linux shell编程学习笔记78:cpio命令——文件和目录归档工具

0 前言 在Linux系统中,除了tar命令,我们还可以使用cpio命令来进行文件和目录的归档。 1 cpio命令的功能,帮助信息,格式,选项和参数说明 1.1 cpio命令的功能 cpio 名字来自 "copy in, copy out"&#xf…

具有RC反馈电路的正弦波振荡器(文氏桥振荡器+相移振荡器+双T振荡器)

2024-9-10,星期二,22:13,天气:雨,心情:晴。今天从下午开始淅淅沥沥一直在下雨,还好我有先见之明没骑自行车,但是我忘带伞了,属于说是有点脑子但是不多了,2333…

如何注册谷歌账号(“此电话号码无法验证”问题)

如何注册谷歌账号(“此电话号码无法验证”问题) 以下注册账号的步骤于 2024.9.10 20:00 成功实施。 文章目录 如何注册谷歌账号(“此电话号码无法验证”问题)1)打开谷歌浏览器2)设置浏览器语言【英语&…

elementPlus 反显el-select多选,只反显了id,没有名称

elementPlus 反显el-select多选,只反显了id,没有名称 原因 : el-select的v-model数组中元素和接口返回的数组中元素类型不同,一个是字符串一个是数字类型 解决办法 : 数组中字符串转换下数字,或者数字转…

Docker基本管理--Dockerfile镜像制作(Docker技术集群与应用)

容器端口映射; 容器间通信; 容器数据卷; DockerFile; 容器端口映射: 实验环境:紧接着之前的快照,将该文件夹拉取进去; 然后执行导入的脚本,会将该目录下所有打包好的镜像文件导入进入。 然后进…

axios取消请求

1.使用CancelToken: class RequestHttp {service: AxiosInstance;public constructor(config: AxiosRequestConfig) {// 实例化axiosthis.service axios.create(config);/*** description 请求拦截器* 客户端发送请求 -> [请求拦截器] -> 服务器*/this.service.interce…

【项目一】基于pytest的自动化测试框架day1

day1不涉及编写代码,只简单梳理接口测试相关的概念。 day1接口测试的本质:功能测试的一部分测试用例的设计与实现接口调试与自动化:从postman到持续集成补充概念 day1 接口测试的本质:功能测试的一部分 接口测试是功能测试的一部…

每个python程序员都应该早点知道的 6 个 Python 函数

在编程中,默认参数的引入使得函数调用更为灵活,不仅允许开发者在特定情况下省略某些非必需参数,同时也强调了对参数与实际传递值(即论点)之间区别的理解,这对于掌握函数工作机制至关重要。 此外&#xff0…

nnunetv2系列:使用默认的预测类推理2D数据

nnunetv2系列:使用默认的预测类推理2D数据 这里参考源代码nnUNet/nnunetv2/inference/predict_from_raw_data.py中给的示例进行调整和测试。 代码示例 from torch import device from nnunetv2.inference.predict_from_raw_data import nnUNetPredictor# from nn…