`
jakielong
  • 浏览: 223596 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

ARP头

阅读更多

ifndef _NET_IF_ARP_H_ 
#define _NET_IF_ARP_H_

/* 
* 地址解释协议. 
* 
* 查看 RFC 826 对该协议的描述.   ARP 包长度是变化的 
* 头部(arphdr)结构定义了固定长度部分. 
*/ 
struct arphdr { 
u_short ar_hrd; /* 格式化的硬件地址 */ 
#define ARPHRD_ETHER 1 /* 以太网格式 */ 
#define ARPHRD_IEEE802 6 /* 令牌环网格式 */ 
#define ARPHRD_FRELAY 15 /* 帧中继硬件格式 */ 
u_short ar_pro; /* 协议地址格式 */ 
u_char ar_hln; /* 硬件地址长度*/ 
u_char ar_pln; /* 协议地址长度 */ 
u_short ar_op; /* 以下之一: */ 
#define ARPOP_REQUEST 1 /* 发出请求解释一IP地址 */ 
#define ARPOP_REPLY 2 /* 回应上一个请求 */ 
#define ARPOP_REVREQUEST 3 /* 请求一IP地址(给出硬件地址,实际上是逆向地址解释) */ 
#define ARPOP_REVREPLY 4 /* 回应逆向地址解释 */ 
#define ARPOP_INVREQUEST 8 /* 请求对方的ID */ 
#define ARPOP_INVREPLY 9 /* 回应对方的ID */ 
/* 
* 下面的字段是可变长的, 
* 主要是依照上面给出的定义. 
*/ 
#ifdef COMMENT_ONLY 
u_char ar_sha[]; /* 发送者硬件地址 */ 
u_char ar_spa[]; /* 发送者协议地址 */ 
u_char ar_tha[]; /* 目的方硬件地址 */ 
u_char ar_tpa[]; /* 目的方协议地址*/ 
#endif 
};

/* 
* ARP ioctl 请求 
*/ 
struct arpreq { 
struct sockaddr arp_pa; /* 协议地址 */ 
struct sockaddr arp_ha; /* 硬件地址 */ 
int arp_flags; /* 标识 */ 
}; 
/*   arp_flags 和 at_flags 域的值 */ 
#define ATF_INUSE 0x01 /* 入口在使用 */ 
#define ATF_COM 0x02 /* 完整的入口 (enaddr 有效) */ 
#define ATF_PERM 0x04 /* 持久的入口 */ 
#define ATF_PUBL 0x08 /* 发布一入口 (回应其他主机) */ 
#define ATF_USETRAILERS 0x10 /* 有追踪请求 */ 

#ifdef _KERNEL 
/* 
* 该结构是以太网设备驱动程序和ARP程序所共享. 
*/ 
struct arpcom { 
/* 
*   ifnet 结构必须在此结构的第一个位置. 
*/ 
struct ifnet ac_if; 
u_char ac_enaddr[6]; /* 以太网硬件地址*/ 
int ac_multicnt; /* 多播地址列表数 */ 
void *ac_netgraph; /* PPPoE(ADSL)的指针 */ 
}; 

extern u_char etherbroadcastaddr[6]; 
#endif 

#endif /* !_NET_IF_ARP_H_ */

typedef struct _ARPHdr
{
unsigned short arp_hrd;
unsigned short arp_proto;
unsigned char arp_hlen;
unsigned char arp_plen;
unsigned short arp_op;
unsigned char arp_sha[6];
unsigned char arp_spa[4];
unsigned char arp_tha[6];
unsigned char arp_tpa[4];
}ARPHdr;
 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics