Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1741679
  • 博文数量: 782
  • 博客积分: 2455
  • 博客等级: 大尉
  • 技术积分: 4140
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-06 21:37
个人简介

Linux ,c/c++, web,前端,php,js

文章分类

全部博文(782)

文章存档

2015年(8)

2014年(28)

2013年(110)

2012年(307)

2011年(329)

分类: C/C++

2013-08-01 11:54:32


/*        要了解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_ */
阅读(1340) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~