当前位置: 首页 > news >正文

Linux网络编程- ether_header iphdr tcphdr

struct ether_header

struct ether_header 是一个数据结构,用于表示以太网(Ethernet)帧的头部。这个结构体在 <netinet/if_ether.h> 头文件中定义。当你处理或分析以太网帧时,可以使用这个结构体来访问和解读 Ethernet 头部的各个字段。

以下是 struct ether_header 的一些主要字段:

  1. ether_dhost: 目标 MAC 地址 (Destination MAC address),一个 6 字节的数组。

  2. ether_shost: 源 MAC 地址 (Source MAC address),一个 6 字节的数组。

  3. 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 的一些主要字段:

  1. version: IP 版本号。对于 IPv4,这个值总是4。

  2. ihl: IP 头部长度 (header length),通常以 32 位字为单位。

  3. tos: 服务类型 (Type of Service),用于QoS (服务质量)。

  4. tot_len: 总长度,包括 IP 头部和数据。

  5. id: IP 数据包的唯一标识符。

  6. frag_off: 分片偏移。

  7. ttl: 生存时间 (Time To Live)。每当数据包经过一个路由器时,该值就会减少1,直到它到达0,此时数据包会被丢弃。

  8. protocol: 传输层协议。例如,TCP 是6,UDP 是17。

  9. check: IP 头部的校验和。

  10. saddr: 源 IP 地址。

  11. 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 的一些主要字段:

  1. th_sport: 源端口号 (source port)
  2. th_dport: 目的端口号 (destination port)
  3. th_seq: 序列号 (sequence number)
  4. th_ack: 确认号 (acknowledgment number)
  5. th_off: 数据偏移 (data offset),也经常称为头部长度 (header length)。这告诉我们 TCP 头部有多长,通常以 32 位字为单位。
  6. th_flags: 各种控制标志。例如:
    • TH_FIN: 结束连接
    • TH_SYN: 同步序列号
    • TH_RST: 重置连接
    • TH_PUSH: Push 函数
    • TH_ACK: 确认字段有效
    • TH_URG: 紧急指针字段有效
  7. th_win: 窗口大小 (window size),用于流控制。
  8. th_sum: 校验和 (checksum)
  9. 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 是一个数据结构&#xff0c;用于表示以太网&#xff08;Ethernet&#xff09;帧的头部。这个结构体在 <netinet/if_ether.h> 头文件中定义。当你处理或分析以太网帧时&#xff0c;可以使用这个结构体来访问和解读 Ethernet 头部…...

wpf中的StaticResource和DynamicResource

不同点一&#xff1a;StaticResource是程序载入时对资源的一次性使用&#xff0c;之后就不在访问了 DynamicResouce则是程序运行过程中回去访问资源 样例&#xff1a;在xaml中定义好的资源 <Window.Resources><SolidColorBrush x:Key"borderRed" Color"…...

数据结构与算法基础-(3)

&#x1f308;write in front&#x1f308; &#x1f9f8;大家好&#xff0c;我是Aileen&#x1f9f8;.希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流. &#x1f194;本文由Aileen_0v0&#x1f9f8; 原创 CSDN首发&#x1f412; 如…...

maven中relativepath标签的含义

一 relative标签的含义 1.1 作用 这个<parent>下面的<relativePath>属性&#xff1a;parent的pom文件的路径。 relativePath 的作用是为了找到父级工程的pom.xml;因为子工程需要继承父工程的pom.xml文件中的内容。然后relativePath 标签内的值使用相对路径定位…...

Greenplum 对比 Hadoop

Greenplum属于MPP架构&#xff0c;和Hadoop一样都是为了解决大规模数据的并行计算而出现的技术&#xff0c;两者的相似点在于&#xff1a; 分布式存储&#xff0c;数据分布在多个节点服务器上分布式并行计算框架支持横向扩展来提高整体的计算能力和存储容量都支持X86开放集群架…...

OJ练习第182题——字典树(前缀树)

字典树&#xff08;前缀树&#xff09; 208. 实现 Trie (前缀树)题目描述示例知识补充官解代码 211. 添加与搜索单词 - 数据结构设计题目描述示例思路Java代码 208. 实现 Trie (前缀树) 力扣链接&#xff1a;208. 实现 Trie (前缀树) 题目描述 示例 知识补充 插入字符串 我…...

前端知识总结

在前端开发中&#xff0c;y x是一种常见的自增运算符的使用方式。它表示将变量x的值自增1&#xff0c;并将自增后的值赋给变量y。 具体来说&#xff0c;x是一种后缀自增运算符&#xff0c;表示将变量x的值自增1。而y x则是将自增前的值赋给变量y。这意味着在执行y x之后&am…...

中国JP-10燃料行业市场研究与预测报告(2023版)

内容简介&#xff1a; 高密度燃料是指以石油基、煤基和生物质基烃类为原料&#xff0c;通过聚合、加氢、异构等工艺合成的密度大于0.85 gcm-3的饱和多环碳氢化合物&#xff0c;广泛应用于航空航天领域。由于高密度燃料密度大和体积热值高等特点&#xff0c;飞行器在油箱体积一…...

护眼灯显色指数应达多少?眼科医生推荐灯光显色指数多少合适

台灯的显色指数是其非常重要的指标&#xff0c;它可以表示灯光照射到物体身上&#xff0c;物体颜色的真实程度&#xff0c;一般用平均显色指数Ra来表示&#xff0c;Ra值越高&#xff0c;灯光显色能力越强。常见的台灯显色指数最低要求一般是在Ra80以上即可&#xff0c;比较好的…...

AI 大模型

随着人工智能技术的迅猛发展&#xff0c;AI 大模型逐渐成为推动人工智能领域提升的关键因素&#xff0c;大模型已成为了引领技术浪潮研究和应用方向。大模型即大规模预训练模型&#xff0c;通常是指那些在大规模数据上进行了预训练的具有庞大规模和复杂结构的人工智能模型&…...

一个案例熟悉使用pytorch

文章目录 1. 完整模型的训练套路1.2 导入必要的包1.3 准备数据集1.3.1 使用公开数据集&#xff1a;1.3.2 获取训练集、测试集长度&#xff1a;1.3.3 利用 DataLoader来加载数据集 1.4 搭建神经网络1.4.1 测试搭建的模型1.4.2 创建用于训练的模型 1.5 定义损失函数和优化器1.6 使…...

MySQL - limit 分页查询 (查询操作 五)

功能介绍&#xff1a;分页查询&#xff08;limit&#xff09;是一种常用的数据库查询技术&#xff0c;它允许我们从数据库表中按照指定的数量和顺序获取数据&#xff0c;它在处理大量数据时特别有用&#xff0c;可以提高查询效率并减少网络传输的数据 语法&#xff1a;SELECT …...

代码随想录笔记--动态规划篇

1--动态规划理论基础 动态规划经典问题&#xff1a;① 背包问题&#xff1b;② 打家劫舍&#xff1b;③ 股票问题&#xff1b; ④ 子序列问题&#xff1b; 动态规划五部曲&#xff1a; ① 确定 dp 数组及其下标的含义&#xff1b; ② 确定递推公式&#xff1b; ③ 确定 dp 数组…...

vue之vuex

Vuex 是 Vue.js 的一个状态管理模式和库&#xff0c;为应用中的所有组件提供了一个集中式的存储管理&#xff0c;并提供了一种强大的方式来管理应用的状态。Vuex 包含以下核心概念&#xff1a; State&#xff1a;定义了应用的状态&#xff0c;类似于组件中的 data。 Getters&a…...

ISO 26262 系列学习笔记 ———— ASIL定义(Automotive Safety Integration Level)

文章目录 介绍严重度&#xff08;Severity&#xff09;暴露概率&#xff08;Probability of Exposure&#xff09;可控性&#xff08;Controllability&#xff09; 介绍 如果没有另行说明&#xff0c;则应满足ASIL A、B、C和D各分条款的要求或建议。这些要求和建议参考了安全目…...

代码随想录 第8章 二叉树

1、理论知识 &#xff08;1&#xff09;、满二叉树 如果一棵二叉树只有度为0的节点和度为2的节点&#xff0c;并且度为0的节点在同一层上&#xff0c;则这棵二叉树为满二叉树。 &#xff08;2&#xff09;、完全二叉树 除了底层节点可能没有填满&#xff0c;其余每层的节点…...

计算机网络工程师多选题系列——计算机网络

2 计算机网络 2.1 网络技术基础 题型1 TCP/IP与ISO模型的问题 TCP/IP由IETF制定&#xff0c;ISO由OSI制定&#xff1b; TCP/IP分为四层&#xff0c;分别是主机-网络层、互联网络层、传输层和应用层&#xff1b;OSI分为七层&#xff0c;分别是物理层、数据链路层、网络层(实…...

Zabbix5.0_介绍_组成架构_以及和prometheus的对比_大数据环境下的监控_网络_软件_设备监控_Zabbix工作笔记001

z 这里Zabbix可以实现采集 存储 展示 报警 但是 zabbix自带的,展示 和报警 没那么好看,我们可以用 grafana进行展示,然后我们用一个叫睿象云的来做告警展示, 会更丰富一点. 可以看到 看一下zabbix的介绍. 对zabbix的介绍,这个zabbix比较适合对服务器进行监控 这个是zabbix的…...

Spring | 事件监听器应用与最佳实践

引言 在复杂的软件开发环境中&#xff0c;组件之间的通信和信息交流显得尤为重要。Spring框架&#xff0c;作为Java世界中最受欢迎的开发框架之一&#xff0c;提供了一种强大的事件监听器模型&#xff0c;使得组件间的通信变得更加灵活和解耦。本文主要探讨Spring事件监听器的…...

正点原子lwIP学习笔记——NETCONN接口简介

1. NETCONN接口简介 NETCONN API 使用了操作系统的 IPC 机制&#xff0c; 对网络连接进行了抽象&#xff0c;使用同一的接口完成UDP和TCP连接。 NETCONN API接口是在RAW接口基础上延申出来的一套API接口 首先会调用netconn_new创建一个pcb控制块&#xff0c;其实际是一个宏定…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

uniapp中使用aixos 报错

问题&#xff1a; 在uniapp中使用aixos&#xff0c;运行后报如下错误&#xff1a; AxiosError: There is no suitable adapter to dispatch the request since : - adapter xhr is not supported by the environment - adapter http is not available in the build 解决方案&…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)

目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关&#xff0…...

【开发技术】.Net使用FFmpeg视频特定帧上绘制内容

目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法&#xff0c;当前调用一个医疗行业的AI识别算法后返回…...

相关类相关的可视化图像总结

目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系&#xff0c;可直观判断线性相关、非线性相关或无相关关系&#xff0c;点的分布密…...

js 设置3秒后执行

如何在JavaScript中延迟3秒执行操作 在JavaScript中&#xff0c;要设置一个操作在指定延迟后&#xff08;例如3秒&#xff09;执行&#xff0c;可以使用 setTimeout 函数。setTimeout 是JavaScript的核心计时器方法&#xff0c;它接受两个参数&#xff1a; 要执行的函数&…...

网页端 js 读取发票里的二维码信息(图片和PDF格式)

起因 为了实现在报销流程中&#xff0c;发票不能重用的限制&#xff0c;发票上传后&#xff0c;希望能读出发票号&#xff0c;并记录发票号已用&#xff0c;下次不再可用于报销。 基于上面的需求&#xff0c;研究了OCR 的方式和读PDF的方式&#xff0c;实际是可行的&#xff…...

【PX4飞控】mavros gps相关话题分析,经纬度海拔获取方法,卫星数锁定状态获取方法

使用 ROS1-Noetic 和 mavros v1.20.1&#xff0c; 携带经纬度海拔的话题主要有三个&#xff1a; /mavros/global_position/raw/fix/mavros/gpsstatus/gps1/raw/mavros/global_position/global 查看 mavros 源码&#xff0c;来分析他们的发布过程。发现前两个话题都对应了同一…...

OpenGL-什么是软OpenGL/软渲染/软光栅?

‌软OpenGL&#xff08;Software OpenGL&#xff09;‌或者软渲染指完全通过CPU模拟实现的OpenGL渲染方式&#xff08;包括几何处理、光栅化、着色等&#xff09;&#xff0c;不依赖GPU硬件加速。这种模式通常性能较低&#xff0c;但兼容性极强&#xff0c;常用于不支持硬件加速…...