网络开发常用结构体

(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 };

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值