获取tcphdr或者udphdr的结构体

struct iphdr *ip_header = (struct iphdr *)skb_network_header(skb);

unsigned int src_ip = (unsigned int)ip_header->saddr;

unsigned int dest_ip = (unsigned int)ip_header->daddr;

unsigned int src_port = 0;

unsigned int dest_port = 0;

/***get src and dest port number***/

if (ip_header->protocol==17) {

udp_header = (struct udphdr *)(skb_transport_header(skb)+20);

src_port = (unsigned int)ntohs(udp_header->source);

dest_port = (unsigned int)ntohs(udp_header->dest);

} else if (ip_header->protocol == 6) {

tcp_header = (struct tcphdr *)(skb_transport_header(skb)+20);

src_port = (unsigned int)ntohs(tcp_header->source);

dest_port = (unsigned int)ntohs(tcp_header->dest);

}

通过skb_transport_header函数获取到结构体

时间: 2024-10-05 01:26:05

获取tcphdr或者udphdr的结构体的相关文章

C语言中的系统时间结构体类型

在C语言涉及中经常需要定时触发事件,涉及到获取系统时间,其结构体类型有多种.Unix/Linux系统下有以下几种时间结构: 1.time_t 类型:长整型,一般用来表示从1970-01-01 00:00:00时以来的秒数,精确度:秒:由函数time()获取: 该类型定义在头文件 /usr/include/sys/time.h 中: #define _TIME_T       typedef   long   time_t;             #endif 函数定义:time_t   tim

iOS runtime探究(一): 从runtime开始理解面向对象的类到面向过程的结构体

你要知道的runtime都在这里 转载请注明出处 http://blog.csdn.net/u014205968/article/details/67639205 本文主要讲解runtime相关知识,从原理到实践,由于包含内容过多分为以下五篇文章详细讲解,可自行选择需要了解的方向: 从runtime开始: 理解面向对象的类到面向过程的结构体 从runtime开始: 深入理解OC消息转发机制 从runtime开始: 理解OC的属性property 从runtime开始: 实践Category添加属

EDKII CR宏:根据成员指针获取父结构体变量指针

核心提示: 1. CR宏 (Containing Record):根据成员指针获取父结构体变量指针 2. 0 指针的妙用. 在EDKII 的代码中有不少关于CR宏的使用,如 时钟中断处理函数CoreTimerTick. VOID EFIAPI CoreTimerTick ( IN UINT64 Duration ) { IEVENT *Event; ... if (!IsListEmpty (&mEfiTimerList)) { Event = CR (mEfiTimerList.Forward

获取结构体成员偏移量

具体方法 #define offsetoff(TYPE,MEMBER)  ( (size_t)( &( ( (TYPE*)0 )->MEMBER ) ) ) 实现解析     (TYPE*)0是一个空指针,如果使用空指针访问成员肯定造成段错误,但是前面的"&"这个符号,表示我们仅仅取MEMBER字段的地址,而不是引用该字段内容,因此不会造成段错误.     另外,结构体中的字段在内存中分配的地址是连续的,当我们去访问某个字段时,例如,&( ( (TYPE*

获取网络接口信息——ioctl()函数与结构体struct ifreq、 struct ifconf

转载请注明出处:windeal专栏 Linux 下 可以使用ioctl()函数 以及 结构体 struct ifreq  结构体struct ifconf来获取网络接口的各种信息. ioctl 首先看ioctl()用法 ioctl()原型如下: #include <sys/ioctl.h> int ioctl(int fd, int request, ...); 参数: fd     : 文件描述符 request:  表示要请求的信息.如IP地址.网络掩码等 ...     :  后面的可变

c# 利用结构体获取json数据

最近做微信支付,要获取用户的openid,调用接口后返回的是json格式的数据,我想在c#后台把数据逐一取出,网上查了查,找到以下方法: 1.首先调用接口,要有一个post数据到指定url并返回数据的函数: protected string PostXmlToUrl(string url, string postData) { string returnmsg = ""; using (System.Net.WebClient wc = new System.Net.WebClient

C#中使用反射获取结构体实例

原文:C#中使用反射获取结构体实例 一般用反射获取类对象的实例比较简单,只要类有一个无参构造函数或没有显示声明带参的构造函数即可使用如下代码 static void Main(string[] args) { Type type = typeof(MyObject); object obj = type.GetConstructor(Type.EmptyTypes).Invoke(null); Console.WriteLine(obj); } class MyObject { } 之前我一直没

Linux中的两个经典宏定义:获取结构体成员地址,根据成员地址获得结构体地址;Linux中双向链表的经典实现。

倘若你查看过Linux Kernel的源码,那么你对 offsetof 和 container_of 这两个宏应该不陌生.这两个宏最初是极客写出的,后来在Linux内核中被推广使用. 1. offsetof 1.1 offsetof介绍 定义:offsetof在linux内核的include/linux/stddef.h中定义.#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) 说明:获得结构体(TYPE)的变量成员(

go语言 从结构体中获取某个字段的值(反射+泛型)

Go 语言提供了 user.Name 语法,来从 user 结构体中获取 Name 的值. 那么如果我们想将 Name 变成变量该如何做呢? 原型:getStructField(input interface{}, key string) (value interface{}, err error) 功能:从 input 结构体中,取出 key 字段 对应的值 代码实现: package utils import ( "errors" "fmt" "ref