📄 dhcpserver.c
字号:
/****************************************************************************by grandchips #gcc -c DhcpServer.c #gcc DhcpServer.o -lpthread -o DhcpServer.cgi****************************************************************************/#include<sys/types.h>#include<stdio.h>#include <string.h>#include <unistd.h>#include <sys/stat.h>#include <fcntl.h>main(){ FILE *flease; //open configure file if ((flease=fopen("/var/lib/misc/udhcpd.leases", "rw")) == NULL) { printf("Error in open configure file.\n"); exit(5); }; char head[20];//scan the head of struct lease char ip[100][20]; char leftchar[2],rightchar[2]; char ends_time[100][10]; char mac[100][20]; char hostname[100][20]; int i; i=0; while(fscanf(flease,"%s",head)!=EOF) { if (strcmp(head,"lease")!=0) fscanf(flease,"%*[^\n]%*c");//jump else //scan struct lease { fscanf(flease,"%s",ip[i]); fscanf(flease,"%s",leftchar); printf("debug 5.....leftchar=%s\n",leftchar); //printf("%s\t",ip[i]); if (strcmp(leftchar,"{")==0 ) { fscanf(flease,"%*c"); //jump /n fscanf(flease,"%*s%*s%*s%*s%*c"); //jump a row fscanf(flease,"%*s%*s%*s"); //jump 3 string fscanf(flease,"%s",ends_time[i]); //printf("%s\t",ends_time[i]);printf("debug 6.....ends_time=%s\n",ends_time[i]); fscanf(flease,"%*c"); //jump /n fscanf(flease,"%*[^\n]%*c"); //jump a row fscanf(flease,"%*[^\n]%*c"); //jump a row fscanf(flease,"%*s%*s"); //jump 2 string fscanf(flease,"%s",mac[i]); //mac addressprintf("debug 7.....mac=%s\n",mac[i]); fscanf(flease,"%*c"); //jump /n fscanf(flease,"%*[^\n]%*c"); //jump a row fscanf(flease,"%*s"); //jump a string fscanf(flease,"%s",hostname[i]); //hostname fscanf(flease,"%*c"); //jump /nprintf("debug 8.....hostname=%s\n",hostname[i]); fscanf(flease,"%s",rightchar); if (strcmp(rightchar,"}")==0 ) i++; } else printf("the format of file leases is error!\n"); }}//end whilefclose(flease);char start[20];char end[20];int option_lease;char option_dns[20];strcpy(start,"192.168.1.1");strcpy(end,"192.168.1.254");strcpy(option_dns,"192.168.1.1");option_lease=7200;printf("Contenttype:text/html\n\n");printf("<HTML><HEAD><TITLE>DHCP</TITLE>\n");
printf("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=gb2312\">\n");
printf("<meta http-equiv=\"pragma\" content=\"no-cache\" >\n");
printf("<style>\n");
printf("<!--\n");
printf("body { font-size: 75%; color: #003399; background-color: #FFFFFF; padding-top: 10px; padding-left: 10px; font-family: \"宋体\", \"Times New Roman\"; }\n");
printf("td {\n");
printf(" font-size: 12px;\n");
printf(" line-height: 18px;\n");
printf(" text-decoration: none;\n");
printf(" background-color: #CCCCFF;\n");
printf("}\n");
printf("input.button { font-size: 12px; font-style: normal; font-weight: normal; font-variant: normal; border: 1px solid #183ead; line-height: normal; background-color: #ddddff; color: #000000; height: 18px; } \n");
printf("input.text { font-size: 12px; font-style: normal; line-height: normal; font-weight: normal; font-variant: normal; height: 18px; border: 1px solid #183ead; color: #000000; padding-right: 3px; padding-left: 3px; }\n");
printf("td.title { font-size: 12px; color: #FFFFFF; background-color: #336D2B; height: 24px; }\n");
printf("td.tail { font-size: 12px; height: 25px; }\n");
printf("td.hline { background-color: #8235A6; height: 1px; color: #8235A6; } \n");
printf("td.vline { color: #8235A6; background-color: #8235A6; width: 1px; }\n");
printf(".space { margin-top: 10px; margin-bottom: 10px; }\n");
printf("table { background-color: #F5F5F5; }\n");
printf("select.list { font-size: 12px; font-style: normal; line-height: normal; font-weight: normal; font-variant: normal; height: 18px; color: #000000; border: 1px solid #183ead; } \n");
printf("input.buttonface { font-size: 12px; font-style: normal; font-weight: normal; font-variant: normal; border: 1px solid #183ead; line-height: normal; background-color: #ddddff; color: #000000; height: 18px; } \n");
printf("td.top { font-size: 12px; line-height: 18px; text-decoration: none; vertical-align: top; }\n");
printf("input.textspecial { font-size: 12px; font-style: normal; line-height: normal; font-weight: normal; font-variant: normal; height: 18px; border: 1px solid #183ead; color: #000000; }\n");
printf("-->\n");
printf("</style>\n");
printf("<script type=\"text/JavaScript\">\n");
printf("<!--\n");
printf("function MM_findObj(n, d) { //v4.01\n");
printf("var p,i,x; if(!d) d=document; if((p=n.indexOf(\"?\"))>0&&parent.frames.length) {\n");
printf("d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}\n");
printf(" if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];\n");
printf("for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);\n");
printf("if(!x && d.getElementById) x=d.getElementById(n); return x;\n");
printf("}\n");
printf("function MM_showHideLayers() { //v6.0\n");
printf(" var i,p,v,obj,args=MM_showHideLayers.arguments;\n");
printf("for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];\n");
printf(" if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v=='hide')?'hidden':v; }\n");
printf(" obj.visibility=v; }\n");
printf("}\n");printf("function checkstart(sIPAddress1)\n");
printf("{\n");
printf("var exp=/^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n");
printf("var reg = sIPAddress1.match(exp);\n");
printf("var ErrMsg=\"你输入的地址池开始地址是一个非法的IP地址段!\\nIP段为::xxx.xxx.xxx.xxx(xxx为0-255)!\"; \n");
printf("if(reg==null)\n");
printf("{\n");
printf("alert(ErrMsg);\n");
printf("}\n");
printf("}\n");
printf("function checkend(sIPAddress2)\n");
printf("{\n");
printf("var exp=/^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n");
printf("var reg = sIPAddress2.match(exp);\n");
printf("var ErrMsg=\"你输入的地址池结束地址是一个非法的IP地址段!\\nIP段为::xxx.xxx.xxx.xxx(xxx为0-255)!\";\n");
printf("if(reg==null)\n");
printf(" {\n");
printf(" alert(ErrMsg);\n");printf(" }\n");
printf("}\n");
printf("function checkdns(sIPAddress3)\n");
printf("{\n");
printf("var exp=/^(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])$/;\n");
printf("var reg = sIPAddress3.match(exp);\n");
printf("var ErrMsg=\"你输入的DNS服务器是一个非法的IP地址段!\\nIP段为::xxx.xxx.xxx.xxx(xxx为0-255)!\";\n");
printf("if(reg==null)\n");
printf(" {\n");
printf(" alert(ErrMsg);\n");printf(" }\n");
printf("}\n");printf("function inputend( )\n");
printf("{\n");
printf("var startip=document.forms[0].start.value;\n");//printf("var ip=startip.split(\");\n");//printf("var ip_range=new Array(20);\n");
//printf("var i=0;\n");printf("var count=0;\n");printf("for(var i=0;i<startip.length;i++ )\n");printf("{\n");printf(" if (count==3) break;\n");printf(" if (startip.charAt(i)=='.') count++;\n");//printf(" if (statip.substring(i,i+1)==\".\") count++;\n");//printf(" ip_range[i]=startip.charAt(i);\n");printf("}\n");printf("document.forms[0].end.value=startip.substring(0,i);\n"); //startip //printf("document.forms[0].end.value=startip;\n"); //
printf("}\n");
printf("function checkIP()\n");
printf("{\n");
printf("checkstart(document.forms[0].start.value);\n");
printf("checkend(document.forms[0].end.value);\n");printf("checkdns(document.forms[0].option_dns.value);\n");printf("var startip=document.forms[0].start.value;\n");printf("var endip=document.forms[0].end.value;\n");printf("var count=0;\n");printf("for(var i=0;i<startip.length;i++ )\n");printf("{\n");printf(" if (count==3) break;\n");printf(" if (startip.charAt(i)=='.') count++;\n");printf("}\n");printf("if (startip.substring(0,i)!=endip.substring(0,i) ) \n");printf("alert(\"你输入的地址池结束地址与和开始地址不在同一个网段!\");\n");
printf("}\n");
printf("//-->\n");
printf("</script>\n");
printf("<body>\n");
printf("<center>\n");
printf("<form action=\"dDhcpServer.cgi\" method=\"post\">\n");
printf("<table width=\"500\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
printf("<tr><td width=\"30\" class=\"title\"><img src=\"/images/arctab.jpg\" width=\"30\" height=\"31\"></td>\n");
printf("<td width=\"470\" align=\"left\" valign=\"middle\" class=\"title\">DHCP服务</td></tr>\n");
printf("<tr><td colspan=\"30\"><table width=\"470\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
printf("<tr><td class=\"vline\" rowspan=\"15\"><br> </td>\n");
printf("<td width=\"500\">\n");
printf("<table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"space\">\n");
printf("<tr><td>本路由器内建DHCP服务器,它能自动替您配置局域网中各计算机的TCP/IP协议。</td></tr></table>\n");
printf("<table width=\"400\" border=\"0\" align=\"center\" class=\"space\">\n");
printf("<tr><td width=\"107\">DHCP服务器:</td>\n");
printf("<td width=\"283\"> <input name=dhcpserver type=\"radio\" value=\"0\" >不启用\n");
printf("<input name=dhcpserver type=\"radio\" value=\"1\" Checked>启用 </td></tr>\n");
printf("<tr><td>地址池开始地址:</td>\n");
printf("<td><input name=start type=\"text\" class=\"text\" onBlur=\"checkstart(document.forms[0].start.value)\" value=%s size=\"15\" maxlength=\"15\"></td></tr>\n",start);
printf("<tr><td>地址池结束地址:</td>\n");
printf("<td><input name=end type=\"text\" class=\"text\" onBlur=\"checkend(document.forms[0].end.value)\" onSelect=\"inputend()\" value=%s size=\"15\" maxlength=\"15\"></td></tr>\n",end);
printf("<tr><td>地址租期:</td>\n");
printf("<td><input name=option_lease type=\"text\" class=\"text\" value=%d size=\"4\" maxlength=\"4\"> 秒(1~2880分钟,缺省为120分钟)</td></tr>\n",option_lease);
printf("<tr><td>DNS服务器:</td>\n");
printf("<td><input name=option_dns type=\"text\" class=\"text\" onBlur=\"checkdns(document.forms[0].option_dns.value)\" value=%s size=\"15\" maxlength=\"15\">(可选)</td></tr>\n",option_dns);
printf("</table>\n");
printf("</td><td class=\"vline\" rowspan=\"15\"><br> </td></tr>\n");
printf("<tr><td class=\"hline\"></td></tr>\n");
printf("<tr><td height=\"30\" class=\"tail\"> \n");
printf("<input name=\"Submit\" type=\"submit\" class=\"button\" id=\"Submit\" onMouseDown=\"checkIP()\" value=\"保 存\"> \n");
printf("<input name=\"reset\" type=\"reset\" class=\"button\" id=\"reset\" value=\"重 填\">\n");
printf("</td></tr><tr><td class=\"hline\"></td></tr>\n");
printf("</table></td></tr></table>\n");
printf("</form></center>\n");
printf("<br>\n");printf("<br>\n");printf("<br>\n");
printf("<center>\n");
printf("<form action=\"sDhcpServer.cgi\" method=\"post\">\n");
printf("<table width=\"500\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
printf("<tr><td width=\"30\" class=\"title\"><img src=\"/images/arctab.jpg\" width=\"30\" height=\"31\"></td>\n");
printf("<td width=\"470\" align=\"left\" valign=\"middle\" class=\"title\">静态地址分配</td></tr>\n");
printf("<tr><td colspan=\"2\"><table width=\"502\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">\n");
printf("<tr><td class=\"vline\" rowspan=\"15\"><br> </td>\n");
printf("<td width=\"500\">\n");
printf("<table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"0\" cellspacing=\"0\" class=\"space\">\n");
printf("<tr><td>本页设置DHCP服务器的静态地址分配功能。</td></tr></table>\n");
printf("<table width=\"410\" border=\"0\" align=\"center\" class=\"space\">\n");
printf("<tr>\n");
printf("<td width=\"10\" align=\"center\">ID</td> \n");printf("<td width=\"100\" align=\"center\">客户端名</td> \n");
printf("<td width=\"100\" align=\"center\">MAC 地址</td> \n");
printf("<td width=\"100\" align=\"center\">IP 地址</td>\n");
printf("<td width=\"100\" align=\"center\">结束时间</td>\n");
printf("</tr>\n");
int N;N=i;for(i=N-1;i>-1;i--){hostname[i][strlen(hostname[i])-2]='\0';mac[i][strlen(mac[i])-1]='\0';ends_time[i][strlen(ends_time[i])-1]='\0';
printf("<tr><td width=\"10\" align=\"center\">%d</td>\n",N-i);printf("<td width=\"100\" align=\"center\"><input name=host%d type=\"text\" class=\"text\" value=%s size=\"20\" maxlength=\"20\"></td>\n",i,&hostname[i][1]);
printf("<td width=\"100\" align=\"center\"><input name=mac%d type=\"text\" class=\"text\" value=%s size=\"20\" maxlength=\"20\"></td>\n",i,mac[i]);
printf("<td width=\"100\" align=\"center\"><input name=ip%d type=\"text\" class=\"text\" value=%s size=\"20\" maxlength=\"20\"></td>\n",i,ip[i]);
printf("<td width=\"100\" align=\"center\"><input name=time%d type=\"text\" class=\"text\" value=%s size=\"15\" maxlength=\"15\"></td>\n",i,ends_time[i]);
printf("</tr>\n");
}
printf("</table>\n");
printf("</td><td class=\"vline\" rowspan=\"15\"><br> </td></tr>\n");
printf("<tr><td class=\"hline\"></td></tr>\n");
printf("<tr><td height=\"30\" class=\"tail\"> \n");
printf("<input name=Submit type=\"submit\" class=\"button\" id=\"Submit\" value=\"保 存\"> \n");
printf("<input name=reset type=\"reset\" class=\"button\" id=\"reset\" value=\"重 填\">\n");
printf("</td></tr><tr><td class=\"hline\"></td></tr>\n");
printf("</table></td></tr></table>\n");
printf("</form></center>\n");
printf("</body>\n");
printf("<head><meta http-equiv=\"pragma\" content=\"no-cache\"></head></html>\n");fflush(stdout);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -