⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndrev.c

📁 早期freebsd实现
💻 C
字号:
/* *	Ndrev	Takes a standard "NAMED" file and creates "reverse" (PTR) *		entries from each host (IN A) entry. * *	Calling sequence: * *		ndrev NETWORK -d DOMAIN [FILE] * *	where:	NETWORK	is the class a, b, or c network or subnetwork *			number to reverse.  All entries not belonging *			to this network will be ignored. * *		DOMAIN	is the root domain of the NAMED file being processed. * *		FILE	is the source file name.  Default is standard input. * *	Written by Douglas E. Nelson, Michigan State University * *	Copyright, 1989, Michigan State University Board of Trustees */#include <stdio.h>#include <sys/types.h>#include <sys/stat.h>gotoeol(f) register FILE *f; {   register char ch;   do ch=getc(f); while(ch!='\n' && ch!=EOF);   if (ch==EOF) return(EOF);  else return(0); } /* subroutine:  no case string compare(str1,str2) * compares two strings ignoring alphabetic case * returns NULL if they are equal */ int ncstrcmp(str1,str2) register unsigned char *str1,*str2; {   register unsigned char ch1,ch2;   if (str1==str2) return(0);   if (str1==NULL || str2==NULL) return(1);   while (*str1!=NULL && *str2!=NULL) {     ch1= *str1>='A'&&*str1<='Z'?*str1++|32:*str1++;     ch2= *str2>='A'&&*str2<='Z'?*str2++|32:*str2++;     if (ch1!=ch2) return(1);   }   if (*str1!=NULL || *str2!=NULL) return(-1);   return(0); } main(argc,argv) int argc; char *argv[];{   FILE *f;   char ch;   int hm;   int i;  char name[80],instr[80],instr2[80],adrs[80],deptname[80];   int a1, a2, a3, a4;  int nadr = 0;  int adr1, adr2, adr3, adr4;  deptname[0]='\0';  f = stdin;  while (--argc)  {    ++argv;    if (**argv >= '0' && **argv <= '9') {      nadr = sscanf (*argv,"%d.%d.%d.%d",&adr1,&adr2,&adr3,&adr4);      if (!nadr) {	fprintf (stderr, "Unknown argument: %s\n",*argv);	exit (-1);      }      if (nadr > 3) {	fprintf (stderr, "Cannot reverse a single host\n");	exit (-1);      }    } else if (strcmp(*argv,"-d") == 0) {      if (--argc < 1) {	fprintf (stderr, "Domain name argument missing for -d\n");	exit (-1);      }      strcpy (deptname, *++argv);      strcat (deptname, ".");    } else {      f=fopen(*argv,"r");       if (f==0) {	fprintf (stderr, "Unable to open file: %s\n",*argv);	exit (-2);      }    }  }  if (!nadr) {    fprintf (stderr, "Must specify the (sub)network to reverse, e.g. 35.8\n");    exit (-1);  }  fprintf (stdout, "$ORIGIN\t");  if (nadr > 2)  fprintf (stdout, "%d.",adr3);  if (nadr > 1)  fprintf (stdout, "%d.",adr2);  fprintf (stdout, "%d.IN-ADDR.ARPA.\n",adr1);  name[0] = '\0';  do {     do ch=getc(f); while (ch=='\n' && ch!=EOF);     if (ch>='A' && ch<='Z' || ch >='a' && ch <= 'z' || 	ch >= '0' && ch <= '9' || ch == '@' || ch == ' ' || ch == '\t') {      ungetc(ch,f);       if (ch == ' ' || ch == '\t') {	hm = 1;       } else {	hm=fscanf(f,"%s",name);       }      if (hm == 1) {	do ch = getc(f); while (ch==' ' || ch == '\t');	if (ch >= '0' && ch <= '9') {	  ungetc(ch,f);	  fscanf(f,"%s",instr);	} else {	  ungetc(ch,f);	}	hm=fscanf(f,"%s %s %s",instr,instr2,adrs) + 1;       }      ch = gotoeol(f);      if (hm>=4 && ((ncstrcmp("IN",instr)==NULL) &&	  ((ncstrcmp("A",instr2)==NULL) || (ncstrcmp("SA",instr2)==NULL)))) {	sscanf (adrs,"%d.%d.%d.%d",&a1,&a2,&a3,&a4);	if (a1 == adr1 && (nadr < 2 || a2 == adr2) &&	    (nadr < 3 || a3 == adr3)) {	  fprintf(stdout,"%d",a4);	  if (nadr < 3) fprintf(stdout,".%d",a3);	  if (nadr < 2) fprintf(stdout,".%d",a2);	  fprintf(stdout,"\tIN\tPTR\t");	  if (strcmp("@",name) == 0) {	    fprintf(stdout,"%s",deptname);	  } else {	    fprintf(stdout,"%s",name);	    if (strlen(deptname)>0 && name[strlen(name)-1] != '.')	      fprintf(stdout,".%s",deptname);	  }	  putc('\n',stdout);	}      }    } else {       switch (ch) {	case '$': {	  fscanf(f,"%s %s",instr,instr2);	  ch=gotoeol(f);	  if (ncstrcmp("ORIGIN",instr)==NULL) {	    strcpy(deptname,instr2);	    name[0] = '\0';	  }	  break;	}/*	case ';': {	  putc(ch,stdout);	  while (ch!='\n' && ch!=EOF) {	    ch=getc(f);	    putc(ch,stdout);	  }	  break;	}*/	default: {	  ch=gotoeol(f);	  break;	}      }    }  } while (ch!=EOF);   fclose(f);  return(0); } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -