IP包头结构定义以及结构体iphdr分析

2023-10-28 21:50

本文主要是介绍IP包头结构定义以及结构体iphdr分析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Linux, linux
可以使用 http://blog.csdn.net/dreamintheworld/article/details/52096675 中的例程来实践通讯过程;
来看一下IP包, IP头结构的定义


这里写图片描述


这里写图片描述

包格式解析如图
这里写图片描述

数据对应
这里写图片描述

对应的结构体在 /usr/src/linux-2.6.19/include/linux/ip.h(或 /usr/src/linux-headers-3.5.0-18/include/linux/ip.h)

struct iphdr {
#if defined(__LITTLE_ENDIAN_BITFIELD)__u8    ihl:4,version:4;
#elif defined (__BIG_ENDIAN_BITFIELD)__u8    version:4,ihl:4;
#else
#error  "Please fix <asm/byteorder.h>"
#endif__u8    tos;__be16  tot_len;__be16  id;__be16  frag_off;__u8    ttl;__u8    protocol;__sum16 check;__be32  saddr;__be32  daddr;/*The options start here. */
};

看包情况
45(0100,0101) 第一个8位表示4位版本号+4位首部长度, 0100=Version为4, 0101=5*4=20(个字节长度)
00 (0000,0000)第二个8位表示服务类型
00 3C 第三四个, 16位标识
60 DF 表示16位标识符
40 00 表示3位标志+13位片偏移 (000=位标识, 1000000000000=位偏移)
40 表示8位生存时间
06 表示8位协议,这里表示TCP
62 1C 表示16位首部校验和
C0 A8 FB 2C 表示32位源IP地址
C0 A8 FB 42 表示32位目的IP地址
无选项
无数据

这个包TCP协议里面的第一次握手的情况,TCP握手基本就是无选项无数据,所以目的地址之后就没有数据了;

还有关于TCP头部和UDP头部的结构情况,放个图,分析情况基本一致,不做详细分析

TCP
这里写图片描述

//TCP报头结构体   
typedef struct tcphdr   
{  u_short th_sport;  u_short th_dport;  u_int th_seq;  u_int th_ack;  u_int th_off:4;  u_int th_x2:4;  u_char th_flags;  u_short th_win;  u_short th_sum;  u_short th_urp;  
}TCP_HEADER;  

UDP
这里写图片描述

//UDP报头结构体*/   
typedef struct udphdr   
{  u_short uh_sport;  u_short uh_dport;  u_short uh_ulen;  u_short uh_sum;  
}UDP_HEADER; 

参考
http://blog.csdn.net/mrwangwang/article/details/8537775
http://zoufengfu168.blog.163.com/blog/static/5461055200991333616451/
http://www.cnblogs.com/lancidie/archive/2013/05/16/3082378.html

这篇关于IP包头结构定义以及结构体iphdr分析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/296181

相关文章

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Java集合中的链表与结构详解

《Java集合中的链表与结构详解》链表是一种物理存储结构上非连续的存储结构,数据元素的逻辑顺序的通过链表中的引用链接次序实现,文章对比ArrayList与LinkedList的结构差异,详细讲解了链表... 目录一、链表概念与结构二、当向单链表的实现2.1 准备工作2.2 初始化链表2.3 打印数据、链表长

Linux查询服务器 IP 地址的命令详解

《Linux查询服务器IP地址的命令详解》在服务器管理和网络运维中,快速准确地获取服务器的IP地址是一项基本但至关重要的技能,下面我们来看看Linux中查询服务器IP的相关命令使用吧... 目录一、hostname 命令:简单高效的 IP 查询工具命令详解实际应用技巧注意事项二、ip 命令:新一代网络配置全

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

创建springBoot模块没有目录结构的解决方案

《创建springBoot模块没有目录结构的解决方案》2023版IntelliJIDEA创建模块时可能出现目录结构识别错误,导致文件显示异常,解决方法为选择模块后点击确认,重新校准项目结构设置,确保源... 目录创建spChina编程ringBoot模块没有目录结构解决方案总结创建springBoot模块没有目录

SpringBoot利用树形结构优化查询速度

《SpringBoot利用树形结构优化查询速度》这篇文章主要为大家详细介绍了SpringBoot利用树形结构优化查询速度,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一个真实的性能灾难传统方案为什么这么慢N+1查询灾难性能测试数据对比核心解决方案:一次查询 + O(n)算法解决

Linux中的HTTPS协议原理分析

《Linux中的HTTPS协议原理分析》文章解释了HTTPS的必要性:HTTP明文传输易被篡改和劫持,HTTPS通过非对称加密协商对称密钥、CA证书认证和混合加密机制,有效防范中间人攻击,保障通信安全... 目录一、什么是加密和解密?二、为什么需要加密?三、常见的加密方式3.1 对称加密3.2非对称加密四、

MySQL中读写分离方案对比分析与选型建议

《MySQL中读写分离方案对比分析与选型建议》MySQL读写分离是提升数据库可用性和性能的常见手段,本文将围绕现实生产环境中常见的几种读写分离模式进行系统对比,希望对大家有所帮助... 目录一、问题背景介绍二、多种解决方案对比2.1 原生mysql主从复制2.2 Proxy层中间件:ProxySQL2.3

Django中的函数视图和类视图以及路由的定义方式

《Django中的函数视图和类视图以及路由的定义方式》Django视图分函数视图和类视图,前者用函数处理请求,后者继承View类定义方法,路由使用path()、re_path()或url(),通过in... 目录函数视图类视图路由总路由函数视图的路由类视图定义路由总结Django允许接收的请求方法http

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl