找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
广告投放联系QQ68610888
查看: 2995|回复: 1

shell操作ISC DHCP的配置文件/etc/dhcpd.conf

[复制链接]
发表于 2018-12-26 13:32 | 显示全部楼层 |阅读模式
本帖最后由 zeng362424 于 2018-12-26 14:06 编辑

1、因为配置这个文件,这个文件初始内容太多了,所以第一步先去掉多余的,只保留如下配置
  1. # dhcpd.conf

  2. subnet 192.168.30.0 netmask 255.255.255.0 {
  3.   range 192.168.30.2 192.168.30.254;
  4.   option domain-name-servers 114.114.114.114, 8.8.8.8;
  5.   option domain-name "test.com";
  6.   option routers 192.168.30.1;
  7.   default-lease-time 43200;
  8.   max-lease-time 43200;
  9. }
复制代码
2、修改subnet为192.168.40.0 netmask 255.255.255.0
  第一先删除原先这一行
  1. sed -i '/subnet/d'
复制代码

  第二添加新的subnet(在range这一行前面添加一行)
  1. sed -i '/range/isubnet 192.168.40.0 netmask 255.255.255.0 {' /etc/dhcpd.conf
复制代码
C语言实现如下
  1. char cmd[1024]={0};        
  2. memset(cmd,0x0,sizeof(cmd));
  3. snprintf(cmd,sizeof(cmd),"sed -i '/subnet/d' %s",file_name);
  4. printf("cmd=%s\n",cmd);
  5. system(cmd);

  6. memset(cmd,0x0,sizeof(cmd));
  7. snprintf(cmd,sizeof(cmd),"sed -i '/range/isubnet %s netmask %s {' %s","192.168.40.0","255.255.0.0",file_name);
  8. printf("cmd=%s\n",cmd);
  9. system(cmd);
复制代码


3、添加dhcp静态客户端
这里这条sed命令
  1. sed -i '$i 添加的内容' file  #这是在最后一行之前添加字符串,新增一行
复制代码
C语言实现如下
  1. sprintf(str+strlen(str),"\\  host %s\\n",ip);
  2.         sprintf(str+strlen(str),"  {\\n");
  3.         sprintf(str+strlen(str),"      hardware ethernet %s;\\n",mac);
  4.         sprintf(str+strlen(str),"      fixed-address %s;\\n",ip);
  5.         sprintf(str+strlen(str),"  }");
  6.        
  7.         printf("%s",str);
  8.        
  9.         char cmd[1024] = {0};
  10.         snprintf(cmd,sizeof(cmd),"sed -i '$i %s' %s",str,file_name);
  11.         printf("cmd=%s\n",cmd);
  12.         system(cmd);
复制代码

4、删除添加的静态客户端
sed命令
  1. sed -i '/Storage/,+2d' file 删除匹配行以及后面2行
复制代码
C语言实现
  1. memset(cmd,0x0,sizeof(cmd));
  2.         snprintf(cmd,sizeof(cmd),"sed -i '/host %s/,+4d' %s",ip,file_name);
  3.         printf("cmd=%s\n",cmd);
  4.         system(cmd);
复制代码





我的恩山、我的无线 The best wifi forum is right here.
 楼主| 发表于 2018-12-26 14:25 | 显示全部楼层
完整的C语言程序
  1. #include <stdio.h>
  2. #include <string.h>

  3. char ip[] = "192.168.89.80";
  4. char mac[] = "aa:bb:cc:dd:ee:ff";
  5. char *file_name="dhcpd.conf";

  6. int main()
  7. {
  8.         int i = 0;
  9.         char str[1024] = {0};
  10.        
  11.         for(i=0;i<strlen(mac);i++)
  12.         {
  13.                 mac[i] = tolower(mac[i]);
  14.         }
  15.        
  16.         /* add start */
  17.         sprintf(str+strlen(str),"\\  host %s\\n",ip);
  18.         sprintf(str+strlen(str),"  {\\n");
  19.         sprintf(str+strlen(str),"      hardware ethernet %s;\\n",mac);
  20.         sprintf(str+strlen(str),"      fixed-address %s;\\n",ip);
  21.         sprintf(str+strlen(str),"  }");
  22.        
  23.         printf("%s",str);
  24.        
  25.         char cmd[1024] = {0};
  26.         snprintf(cmd,sizeof(cmd),"sed -i '$i %s' %s",str,file_name);
  27.         printf("cmd=%s\n",cmd);
  28.         system(cmd);
  29.        
  30.         /* add end*/
  31.        
  32.         /* delete start */
  33.         memset(cmd,0x0,sizeof(cmd));
  34.         snprintf(cmd,sizeof(cmd),"sed -i '/host %s/,+4d' %s",ip,file_name);
  35.         printf("cmd=%s\n",cmd);
  36.         //system(cmd);
  37.         /* delete end */
  38.        
  39.         /* modify vendor start*/
  40.         memset(cmd,0x0,sizeof(cmd));
  41.         snprintf(cmd,sizeof(cmd),"sed -i '/vendor-encapsulated-options/d' %s",file_name);
  42.         printf("cmd=%s\n",cmd);
  43.         system(cmd);
  44.        
  45.         memset(cmd,0x0,sizeof(cmd));
  46.         snprintf(cmd,sizeof(cmd),"sed -i '/default-lease-time/i\\  option vendor-encapsulated-options "%s";' %s","aaa_testaa",file_name);
  47.         printf("cmd=%s\n",cmd);
  48.         system(cmd);
  49.         /*modify vendor end*/
  50.        
  51.         /* modify dns start*/
  52.         memset(cmd,0x0,sizeof(cmd));
  53.         snprintf(cmd,sizeof(cmd),"sed -i '/domain-name-servers/d' %s",file_name);
  54.         printf("cmd=%s\n",cmd);
  55.         system(cmd);
  56.        
  57.         memset(cmd,0x0,sizeof(cmd));
  58.         snprintf(cmd,sizeof(cmd),"sed -i '/range/a\\  option domain-name-servers %s, %s;' %s","1.1.1.2","2.2.2.3",file_name);
  59.         printf("cmd=%s\n",cmd);
  60.         system(cmd);
  61.         /*modify dns end*/
  62.        
  63.        
  64.         /* modify subnet start*/
  65.         memset(cmd,0x0,sizeof(cmd));
  66.         snprintf(cmd,sizeof(cmd),"sed -i '/subnet/d' %s",file_name);
  67.         printf("cmd=%s\n",cmd);
  68.         system(cmd);
  69.        
  70.         memset(cmd,0x0,sizeof(cmd));
  71.         snprintf(cmd,sizeof(cmd),"sed -i '/range/isubnet %s netmask %s {' %s","192.168.40.0","255.255.0.0",file_name);
  72.         printf("cmd=%s\n",cmd);
  73.         system(cmd);
  74.         /*modify subnet end*/
  75.        
  76.        
  77.         /* modify range start*/
  78.         memset(cmd,0x0,sizeof(cmd));
  79.         snprintf(cmd,sizeof(cmd),"sed -i '/range/d' %s",file_name);
  80.         printf("cmd=%s\n",cmd);
  81.         system(cmd);
  82.        
  83.         memset(cmd,0x0,sizeof(cmd));
  84.         snprintf(cmd,sizeof(cmd),"sed -i '/subnet/a\\  range %s %s;' %s","192.168.40.3","192.168.40.254",file_name);
  85.         printf("cmd=%s\n",cmd);
  86.         system(cmd);
  87.         /*modify range end*/
  88.        
  89.        
  90.         /* modify gateway start*/
  91.         memset(cmd,0x0,sizeof(cmd));
  92.         snprintf(cmd,sizeof(cmd),"sed -i '/option routers/d' %s",file_name);
  93.         printf("cmd=%s\n",cmd);
  94.         system(cmd);
  95.        
  96.         memset(cmd,0x0,sizeof(cmd));
  97.         snprintf(cmd,sizeof(cmd),"sed -i '/domain-name-servers/a\\  option routers %s;' %s","192.168.40.1",file_name);
  98.         printf("cmd=%s\n",cmd);
  99.         system(cmd);
  100.         /*modify gateway end*/
  101.        
  102.         /* modify lease-time start*/
  103.         memset(cmd,0x0,sizeof(cmd));
  104.         snprintf(cmd,sizeof(cmd),"sed -i '/default-lease-time/d' %s",file_name);
  105.         printf("cmd=%s\n",cmd);
  106.         system(cmd);
  107.        
  108.         memset(cmd,0x0,sizeof(cmd));
  109.         snprintf(cmd,sizeof(cmd),"sed -i '/max-lease-time/i\\  default-lease-time %d;' %s",800,file_name);
  110.         printf("cmd=%s\n",cmd);
  111.         system(cmd);
  112.         /*modify lease-time end*/
  113.         return 0;
  114. }
复制代码
我的恩山、我的无线 The best wifi forum is right here.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

有疑问请添加管理员QQ86788181|手机版|小黑屋|Archiver|恩山无线论坛(常州市恩山计算机开发有限公司版权所有) ( 苏ICP备05084872号 )

GMT+8, 2024-3-29 14:16

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

| 江苏省互联网有害信息举报中心 举报信箱:js12377 | @jischina.com.cn 举报电话:025-88802724 本站不良内容举报信箱:68610888@qq.com 举报电话:0519-86695797

快速回复 返回顶部 返回列表