Linux网络编程- ether_header iphdr tcphdr
struct ether_header
struct ether_header 是一个数据结构,用于表示以太网(Ethernet)帧的头部。这个结构体在 <netinet/if_ether.h> 头文件中定义。当你处理或分析以太网帧时,可以使用这个结构体来访问和解读 Ethernet 头部的各个字段。
以下是 struct ether_header 的一些主要字段:
-
ether_dhost: 目标 MAC 地址 (Destination MAC address),一个 6 字节的数组。
-
ether_shost: 源 MAC 地址 (Source MAC address),一个 6 字节的数组。
-
ether_type: 帧类型或以太网协议。这个字段表示载荷的类型/协议。例如,如果值是 0x0800,那么载荷是一个 IPv4 数据包;如果值是 0x0806,那么载荷是一个 ARP 请求或响应。
这个结构体是以太网帧的头部。以太网帧的总长度为 14 字节,其中包括两个 6 字节的 MAC 地址和一个 2 字节的类型字段。
在我们处理原始数据包,特别是在使用 raw sockets 或 pcap 库捕获和发送数据包时,可能会遇到这个结构体。通过它,我们可以解析 Ethernet 帧,了解它的源和目的地址,以及它的载荷是什么类型的协议。
在 struct ether_header *ethhdr = (struct ether_header *)buf; 中,我们从缓冲区 buf 获取了一个指向 Ethernet 帧头部的指针。这样就可以访问和解析 Ethernet 头部的字段。
struct iphdr
struct iphdr 是一个数据结构,用于表示 IPv4 头部。这个结构体在 <netinet/ip.h> 头文件中定义。当你处理或分析 IPv4 数据包时,这个结构体允许你访问和解读 IP 头部的各个字段。
以下是 struct iphdr 的一些主要字段:
-
version: IP 版本号。对于 IPv4,这个值总是4。
-
ihl: IP 头部长度 (header length),通常以 32 位字为单位。
-
tos: 服务类型 (Type of Service),用于QoS (服务质量)。
-
tot_len: 总长度,包括 IP 头部和数据。
-
id: IP 数据包的唯一标识符。
-
frag_off: 分片偏移。
-
ttl: 生存时间 (Time To Live)。每当数据包经过一个路由器时,该值就会减少1,直到它到达0,此时数据包会被丢弃。
-
protocol: 传输层协议。例如,TCP 是6,UDP 是17。
-
check: IP 头部的校验和。
-
saddr: 源 IP 地址。
-
daddr: 目的 IP 地址。
注意,struct iphdr 通常以网络字节序存储其值,所以在解析或设置字段时,你可能需要使用 ntohs()、ntohl()、htons() 和 htonl() 函数来转换字节序。
在 struct iphdr *ip_addr = (struct iphdr *)buf; 中,我们从缓冲区 buf 获取了一个指向 IP 头部的指针。这样可以访问和解析 IP 头部的字段。这种方法通常在处理原始数据包时使用,例如在使用 raw sockets 接收数据时。
struct tcphdr
struct tcphdr 是用于表示 TCP 头部的数据结构,它在 <netinet/tcp.h> 头文件中定义。这个结构体提供了访问 TCP 头部各个字段的能力。
以下是 struct tcphdr 的一些主要字段:
- th_sport: 源端口号 (source port)
- th_dport: 目的端口号 (destination port)
- th_seq: 序列号 (sequence number)
- th_ack: 确认号 (acknowledgment number)
- th_off: 数据偏移 (data offset),也经常称为头部长度 (header length)。这告诉我们 TCP 头部有多长,通常以 32 位字为单位。
- th_flags: 各种控制标志。例如:
- TH_FIN: 结束连接
- TH_SYN: 同步序列号
- TH_RST: 重置连接
- TH_PUSH: Push 函数
- TH_ACK: 确认字段有效
- TH_URG: 紧急指针字段有效
- th_win: 窗口大小 (window size),用于流控制。
- th_sum: 校验和 (checksum)
- th_urp: 紧急指针 (urgent pointer)
当你在网络编程中处理 TCP 数据包时,你可以使用这个结构体来访问和修改 TCP 头部的各个字段。这通常在底层的网络工具和分析器中做,例如在使用 raw sockets 或 pcap 库捕获和发送数据包时。
在 struct tcphdr *tcp_addr = (struct tcphdr *)addr; 中,我们可以获取一个指向 TCP 头部的指针,这样能够访问和解析 TCP 头部的各个字段。这通常在解析原始数据包时做,例如当使用 raw sockets 接收数据时。
相关文章:
Linux网络编程- ether_header iphdr tcphdr
struct ether_header struct ether_header 是一个数据结构,用于表示以太网(Ethernet)帧的头部。这个结构体在 <netinet/if_ether.h> 头文件中定义。当你处理或分析以太网帧时,可以使用这个结构体来访问和解读 Ethernet 头部…...
wpf中的StaticResource和DynamicResource
不同点一:StaticResource是程序载入时对资源的一次性使用,之后就不在访问了 DynamicResouce则是程序运行过程中回去访问资源 样例:在xaml中定义好的资源 <Window.Resources><SolidColorBrush x:Key"borderRed" Color"…...
数据结构与算法基础-(3)
🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…...
maven中relativepath标签的含义
一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性:parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…...
Greenplum 对比 Hadoop
Greenplum属于MPP架构,和Hadoop一样都是为了解决大规模数据的并行计算而出现的技术,两者的相似点在于: 分布式存储,数据分布在多个节点服务器上分布式并行计算框架支持横向扩展来提高整体的计算能力和存储容量都支持X86开放集群架…...
OJ练习第182题——字典树(前缀树)
字典树(前缀树) 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接:208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…...
前端知识总结
在前端开发中,y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1,并将自增后的值赋给变量y。 具体来说,x是一种后缀自增运算符,表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…...
中国JP-10燃料行业市场研究与预测报告(2023版)
内容简介: 高密度燃料是指以石油基、煤基和生物质基烃类为原料,通过聚合、加氢、异构等工艺合成的密度大于0.85 gcm-3的饱和多环碳氢化合物,广泛应用于航空航天领域。由于高密度燃料密度大和体积热值高等特点,飞行器在油箱体积一…...
护眼灯显色指数应达多少?眼科医生推荐灯光显色指数多少合适
台灯的显色指数是其非常重要的指标,它可以表示灯光照射到物体身上,物体颜色的真实程度,一般用平均显色指数Ra来表示,Ra值越高,灯光显色能力越强。常见的台灯显色指数最低要求一般是在Ra80以上即可,比较好的…...
AI 大模型
随着人工智能技术的迅猛发展,AI 大模型逐渐成为推动人工智能领域提升的关键因素,大模型已成为了引领技术浪潮研究和应用方向。大模型即大规模预训练模型,通常是指那些在大规模数据上进行了预训练的具有庞大规模和复杂结构的人工智能模型&…...
一个案例熟悉使用pytorch
文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集:1.3.2 获取训练集、测试集长度:1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使…...
MySQL - limit 分页查询 (查询操作 五)
功能介绍:分页查询(limit)是一种常用的数据库查询技术,它允许我们从数据库表中按照指定的数量和顺序获取数据,它在处理大量数据时特别有用,可以提高查询效率并减少网络传输的数据 语法:SELECT …...
代码随想录笔记--动态规划篇
1--动态规划理论基础 动态规划经典问题:① 背包问题;② 打家劫舍;③ 股票问题; ④ 子序列问题; 动态规划五部曲: ① 确定 dp 数组及其下标的含义; ② 确定递推公式; ③ 确定 dp 数组…...
vue之vuex
Vuex 是 Vue.js 的一个状态管理模式和库,为应用中的所有组件提供了一个集中式的存储管理,并提供了一种强大的方式来管理应用的状态。Vuex 包含以下核心概念: State:定义了应用的状态,类似于组件中的 data。 Getters&a…...
ISO 26262 系列学习笔记 ———— ASIL定义(Automotive Safety Integration Level)
文章目录 介绍严重度(Severity)暴露概率(Probability of Exposure)可控性(Controllability) 介绍 如果没有另行说明,则应满足ASIL A、B、C和D各分条款的要求或建议。这些要求和建议参考了安全目…...
代码随想录 第8章 二叉树
1、理论知识 (1)、满二叉树 如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这棵二叉树为满二叉树。 (2)、完全二叉树 除了底层节点可能没有填满,其余每层的节点…...
计算机网络工程师多选题系列——计算机网络
2 计算机网络 2.1 网络技术基础 题型1 TCP/IP与ISO模型的问题 TCP/IP由IETF制定,ISO由OSI制定; TCP/IP分为四层,分别是主机-网络层、互联网络层、传输层和应用层;OSI分为七层,分别是物理层、数据链路层、网络层(实…...
Zabbix5.0_介绍_组成架构_以及和prometheus的对比_大数据环境下的监控_网络_软件_设备监控_Zabbix工作笔记001
z 这里Zabbix可以实现采集 存储 展示 报警 但是 zabbix自带的,展示 和报警 没那么好看,我们可以用 grafana进行展示,然后我们用一个叫睿象云的来做告警展示, 会更丰富一点. 可以看到 看一下zabbix的介绍. 对zabbix的介绍,这个zabbix比较适合对服务器进行监控 这个是zabbix的…...
Spring | 事件监听器应用与最佳实践
引言 在复杂的软件开发环境中,组件之间的通信和信息交流显得尤为重要。Spring框架,作为Java世界中最受欢迎的开发框架之一,提供了一种强大的事件监听器模型,使得组件间的通信变得更加灵活和解耦。本文主要探讨Spring事件监听器的…...
正点原子lwIP学习笔记——NETCONN接口简介
1. NETCONN接口简介 NETCONN API 使用了操作系统的 IPC 机制, 对网络连接进行了抽象,使用同一的接口完成UDP和TCP连接。 NETCONN API接口是在RAW接口基础上延申出来的一套API接口 首先会调用netconn_new创建一个pcb控制块,其实际是一个宏定…...
7.4.分块查找
一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
HTML前端开发:JavaScript 常用事件详解
作为前端开发的核心,JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例: 1. onclick - 点击事件 当元素被单击时触发(左键点击) button.onclick function() {alert("按钮被点击了!&…...
CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南
🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...
