(1)
struct ethhdr {
unsigned char h_dest[ETH_ALEN]; /* destination eth addr */
unsigned char h_source[ETH_ALEN]; /* source ether addr */
__be16 h_proto; /* packet type ID field */
} __attribute__((packed));
(2)
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;
__u16 check;
__be32 saddr;
__be32 daddr;
/*The options start here. */
};
(3)
struct tcphdr {
__u16 source;
__u16 dest;
__u32 seq;
__u32 ack_seq;
#if defined(__LITTLE_ENDIAN_BITFIELD)
__u16 res1:4,
doff:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
ece:1,
cwr:1;
#elif defined(__BIG_ENDIAN_BITFIELD)
__u16 doff:4,
res1:4,
cwr:1,
ece:1,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1;
#else
#error "Adjust your <asm/byteorder.h> defines"
#endif
__u16 window;
__u16 check;
__u16 urg_ptr;
};
(4)
struct udphdr {
__u16 source;
__u16 dest;
__u16 len;
__u16 check;
};
(5)
struct sk_buff 如图所示:
(6)
注册一个hook函数是围绕nf_hook_ops数据结构的一个非常简单的操作,nf_hook_ops数据结构在linux/netfilter.h中定义,该数据结构的定义如下:
struct nf_hook_ops {
struct list_head list;
/* 此下的值由用户填充 */
nf_hookfn *hook;
int pf;
int hooknum;
/* Hook以升序的优先级排序 */
int priority;
};
(7)
struct sockaddr {
unsigned short sa_family; /* 地址族, AF_xxx */
char sa_data[14]; /* 14 字节的协议地址 */
};
sa_family一般为AF_INET,代表Internet(TCP/IP)地址族;
sa_data则包含该socket的IP地址和端口号。
(8)
另外更有一种结构类型:
struct sockaddr_in {
short int sin_family; /* 地址族 */
unsigned short int sin_port; /* 端口号 */
struct in_addr sin_addr;/* IP地址 */
unsigned char sin_zero[8]; /* 填充0 以保持和struct sockaddr同样大小*/
}; 这个结构更方便使用。sin_zero用来将sockaddr_in结构填充到和struct
(9)
struct in_addr {
unsigned long s_addr;
};
(10)
107 struct ipv6hdr {
108 #if defined(__LITTLE_ENDIAN_BITFIELD)
109 __u8 priority:4,
110 version:4;
111 #elif defined(__BIG_ENDIAN_BITFIELD)
112 __u8 version:4,
113 priority:4;
114 #else
115 #error "Please fix <asm/byteorder.h>"
116 #endif
117 __u8 flow_lbl[3];
118
119 __be16 payload_len;
120 __u8 nexthdr;
121 __u8 hop_limit;
122
123 struct in6_addr saddr;
124 struct in6_addr daddr;
125 };
- 大小: 182.3 KB
分享到:
相关推荐
Winsock遵循Berkeley套接字接口标准,使得在Windows平台上开发网络应用变得更加便捷。 在C/S架构中,客户端与服务器之间的通信通常涉及数据的发送和接收。这些数据往往通过特定的数据结构来传递,也就是这里的...
- **常用结构体**:如`struct ethhdr`,它是以太网帧头部的定义,包含源和目标MAC地址以及协议类型。 - **处理函数**:`eth_hdr()`函数用于获取以太网头部信息,对数据包进行解封装。 - **调试打印**:在开发过程...
本文将详细解析在VC环境下进行网络编程时常用的函数,包括SOCKET类型、WORD类型及其宏、WSADATA类型、WSAStartup和WSACleanup函数,以及socket和setsockopt函数。 首先,`SOCKET`类型是网络编程中的基础,它被定义...
驱动开发部分涵盖了驱动的内核代码、驱动程序、设备文件等多个方面,涉及了常用的设备驱动框架和API函数。 文档的框架部分内容已经填充完整,但是我总结好的并不是大家的,自己总结的才是真正属于自己的知识,所以...
在网络设备驱动开发中,struct net_device 是一个非常重要的结构体。 5. 内核驱动常用处理函数 在 Linux 驱动开发中,需要使用一些基本的处理函数来操作硬件设备。这些函数包括: 5.1 dev_name() dev_name() ...
常用的人脸识别方法包括Eigenface、Fisherface和深度学习的卷积神经网络(CNN)。MATLAB的Deep Learning Toolbox支持搭建和训练CNN模型,进行端到端的人脸识别系统开发。 3. **深入学习结构体**:在MATLAB中,...
### 软件开发常用英文词汇详解 #### abstract 抽象的 - **定义**:在计算机科学中,“抽象”是指将复杂系统简化为更基本元素的过程,以便于理解和操作。 - **应用场景**:通常用于设计模式、面向对象编程等。 ####...
"Linux 驱动开发_嵌入式-常用知识&面试题库_大厂面试真题" 本资源主要介绍了 Linux 驱动开发的常用知识点和面试题库,涵盖了驱动开发的基本概念、字符设备驱动开发、驱动模块的加载和卸载、设备号的分配和管理、...
这是一个常用的10/100M自适应网络控制器驱动程序,通常用于嵌入式系统。dm9000驱动程序包括了初始化函数、中断处理程序以及用于数据包发送和接收的具体操作。 此外,Linux内核还提供了内存管理功能,如dev_alloc_...
ws2_32库提供了对网络编程的支持,常用于网络应用程序的开发。 11. 对象指针:对象指针是指指向对象的指针。在本例中,使用对象指针来指向IP结点,以便对IP结点进行管理和操作。 12. 析构函数:析构函数是指对象...
【网络编程常用函数接口】是计算机科学中进行网络通信的核心组成部分,主要涉及操作系统提供的系统调用,用于创建、管理和操作套接字。这些函数接口在跨平台的软件开发,特别是涉及网络服务和通信的应用程序中至关...
### Linux网络驱动程序开发实例分析分类 #### 一、Linux系统设备驱动程序概述 ##### 1.1 Linux设备驱动程序分类 Linux设备驱动程序在Linux内核中占据着极其重要的位置,随着Linux内核版本的不断演进和发展,驱动...
Linux网络编程超级详细笔记中涉及的知识点包括了Linux网络编程的基础概念、网络编程相关命令以及网络编程中初等函数的使用方法。 首先,在Linux网络编程的基础...这些知识点对于掌握Linux下网络应用的开发至关重要。
在IT领域,编程语言Visual C++(VC++)被广泛用于开发系统级应用程序,它可以访问操作系统的底层功能,包括对硬件设备的控制和网络接口的管理。标题和描述中的"vc实现禁用网卡,禁用网络"指的是利用VC++编写程序来...
winpcap是一个开源的网络数据包捕获和网络监控系统,广泛应用于网络安全、性能监控以及网络协议开发等领域。本项目的核心目标是设计并实现一个能够在网络中抓取数据包,并对这些数据包进行深度解析的工具。 首先,...
开发过程中,可能需要编写字符设备驱动、块设备驱动或网络设备驱动。关键技能包括阅读并理解硬件数据手册,以及熟悉Linux内核API。 3. **C语言**: C语言是嵌入式领域的基础,因为它提供了低级内存操作和直接硬件...
- 基于轴对齐边界框(AABB)的简单碰撞检测是游戏开发中的常用技术,C语言中可通过比较物体边界坐标实现。 5. **网络编程**: 多人在线游戏需要网络编程技术,如TCP/IP协议栈、套接字编程,C语言提供了底层接口来...
C语言是ARM开发中最常用的编程语言,因为它的效率高且移植性好。理解C语言的关键特性,如指针、内存管理、中断服务程序和结构体,对于有效利用ARM硬件资源至关重要。同时,理解如何进行位操作和嵌套中断处理也是ARM...