Chinaunix首页 | 论坛 | 博客
  • 博客访问: 731415
  • 博文数量: 119
  • 博客积分: 137
  • 博客等级: 少校
  • 技术积分: 1582
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-28 16:39
文章分类

全部博文(119)

文章存档

2017年(3)

2016年(7)

2014年(1)

2013年(8)

2012年(20)

2011年(27)

2010年(53)

分类: 系统运维

2011-05-05 09:32:42

不知道是哪个聪明人发明的,使用DHCP协议来做数据的传输…….,该协议使用的可是broadcast的方式去search需要的东西,所以DHCP协议出现了LEASE这种东西,就是防止客户端经常去使用该协议.       回到正文…
网络上关于DHCP协议上自定义option的开发资料很少,我们使用的是UDHCP的开发包,如果要支持自定义的option那就需要在客户端和服务器端分别做开发.
Client:
       Clientpacket.c
              static void init_packet(struct dhcpMessage *packet, char type)
              {
                            //这里我们需要定义一个结构体,为了增加option字段
                            //特别str可以写成””,因为该字段是作为option的显示字段
                            //但如果不是系统保留的option号,那么这里只会显示private
                            struct usermodule
                            {
                                   char um,length;
                                   char str[64];
                            }_usermod={DHCP_USER_DEFINE161,64,""};
              _usermod={DHCP_USER_DEFINE161,64,""};
              //增加两个option
              struct usermodule _usermod1={DHCP_USER_DEFINE162,64,""};
              struct usermodule _usermod2={DHCP_USER_DEFINE163,64,""};
              //在构造包体时添加字段
              add_option_string(packet->options, (unsigned char *) &_usermod);
              add_option_string(packet->options, (unsigned char *) &_usermod1);
              add_option_string(packet->options, (unsigned char *) &_usermod2);
}
Dhcpd.h
#define DHCP_USER_DEFINE161 0xA1   //这里一定要16位的
#define DHCP_USER_DEFINE162 0xA2
#define DHCP_USER_DEFINE163 0xA3
Server端:
                     Dhcpd.h
struct server_config_t {
                                   char *opt_161;          
                                   char *opt_162;                      
                                   char *opt_163;                      
}
        Files.c
static struct config_keyword keywords[] = {
                     {"161",read_str,&(server_config.opt_161),  "My Network 161"},
                     {"162",read_str,&(server_config.opt_162),  "My Network 162"},
              {"163",read_str,&(server_config.opt_163),  "My Network 163"}
}
//这两个部分主要时为了Udhcpd在启动时会读取udhcpd.conf的文件,我们可以提前在该文件中定义好所有的option,所以这就需要程序的支持,
在做通讯时,DHCPD会将自定义的option放在offer包中,client只要解析就可以了.
阅读(1456) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~