| @@ -406,20 +406,55 @@ int markElt(int i, int v) | |||||
| return 1; | return 1; | ||||
| } | } | ||||
| void listElt(void) | |||||
| void listElt(char c) | |||||
| { | { | ||||
| int i; | |||||
| for (i=0; i<iT; i++) | |||||
| printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]); | |||||
| int i,n=0; | |||||
| switch (c) { | |||||
| case '-': | |||||
| for (i=0; i<iT; i++) | |||||
| if (Tno[i]<0) { printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]); | |||||
| n++; | |||||
| } | |||||
| break; | |||||
| case '+': | |||||
| for (i=0; i<iT; i++) | |||||
| if (Tno[i]>0) { printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]); | |||||
| n++; | |||||
| } | |||||
| break; | |||||
| default: | |||||
| for (i=0; i<iT; i++) { | |||||
| printf("%d : %s (%d)\n",Tno[i], Turl[i], Trv[i]); | |||||
| n++; | |||||
| } | |||||
| break; | |||||
| } | |||||
| printf(" %d elements trouves.\n",n); | |||||
| } | } | ||||
| int comsh(char *com) | |||||
| { | |||||
| pid_t pid; | |||||
| int ret; | |||||
| if ((pid = fork()) < 0) { | |||||
| perror("fork2"); return 99; | |||||
| } | |||||
| if (pid == 0) { | |||||
| signal(SIGINT,SIG_IGN); | |||||
| execl("/bin/sh", "sh", "-c", com, (char *) 0); | |||||
| perror("execl2"); return 98; | |||||
| } | |||||
| waitpid(pid,&ret,0); | |||||
| return WEXITSTATUS(ret); | |||||
| } | |||||
| int exeCom(char * comm) /* on se reserve le droit de modifier */ | int exeCom(char * comm) /* on se reserve le droit de modifier */ | ||||
| { | { | ||||
| char b[120]; | char b[120]; | ||||
| sprintf(b,"%s >/dev/null 2>&1",comm); | sprintf(b,"%s >/dev/null 2>&1",comm); | ||||
| return system(b); | |||||
| return comsh(b); | |||||
| } | } | ||||
| /* ### fct de MAJ iptables */ | /* ### fct de MAJ iptables */ | ||||
| @@ -575,7 +610,7 @@ FILE * fw; | |||||
| static int NBin=0, NBout=0; | static int NBin=0, NBout=0; | ||||
| void prInOut(void) | void prInOut(void) | ||||
| { | { | ||||
| printf("%d echanges DNS : %d requetes, %d reponses.\n",NBout+NBin,NBout,NBin); | |||||
| printf(" %d messages DNS: %d requetes, %d reponses.\n",NBout+NBin,NBout,NBin); | |||||
| } | } | ||||
| int printQ(char * q) | int printQ(char * q) | ||||
| @@ -615,150 +650,159 @@ pid_t pid; | |||||
| fauth = (char*)p; | fauth = (char*)p; | ||||
| pid = getpid(); | pid = getpid(); | ||||
| read_history(FHISTO); | read_history(FHISTO); | ||||
| if (REPR) system("reset"); | |||||
| if (REPR) comsh("reset"); | |||||
| while (REQ) { | while (REQ) { | ||||
| if (kill(pid,SIGUSR1) < 0) { /* verif processus acquisition */ | |||||
| ENDT=1; | |||||
| write(p1[1],"\n",1); | |||||
| } | |||||
| free(cmd); | |||||
| cmd = readline("O-> "); | |||||
| if ((n2 = strlen(cmd)) > 0) { | |||||
| write(p1[1],"\n",1); | |||||
| add_history(cmd); | |||||
| switch (*cmd) { | |||||
| case '+' : | |||||
| if (*(cmd+1) != '\0') { | |||||
| if (litligne(cmd+1)) { /* ajout au fichier fauth */ | |||||
| if (debloqueIP(cmd+1,NULL)) printf("Element non valable !\n"); | |||||
| else { | |||||
| if (printQ("ajouter au fichier parametres")) | |||||
| ajoutParam(fauth,cmd+1); | |||||
| listeAllow(); | |||||
| } | |||||
| } else printf("Erreur ajout param. !\n"); | |||||
| } else listeAllow(); | |||||
| break; | |||||
| case '-' : | |||||
| if (*(cmd+1) != '\0') { | |||||
| if (litligne(cmd)) { /* ajout au fichier fauth */ | |||||
| if (rebloqueIP(cmd+1)) printf("Element non valable !\n"); | |||||
| else { | |||||
| if (printQ("ajouter au fichier parametres")) | |||||
| ajoutParam(fauth,cmd); | |||||
| listeDeny(); | |||||
| } | |||||
| } else printf("Erreur ajout param. !\n"); | |||||
| } else listeDeny(); | |||||
| break; | |||||
| case 'l' : | |||||
| listElt(); | |||||
| printf("%sReste %d elts (Max. %d)!\n",ctime(&tim1),iT,MaxElt); | |||||
| prInOut(); | |||||
| break; | |||||
| case 't' : | |||||
| if (*(cmd+1) != '\0') { | |||||
| if ((cmd[1] == '+') || (cmd[1] == '-')) { | |||||
| if ((cmd[1] == '+') && (Trace < TMAX)) Trace++; | |||||
| else { | |||||
| if ((cmd[1] == '-') && (Trace > TMIN)) Trace--; | |||||
| else printf("Erreur: niveau dans [%d, %d].\n",TMIN,TMAX); | |||||
| } | |||||
| } else printf("Erreur: Utiliser t+ ou t- !\n"); | |||||
| if (kill(pid,SIGUSR1) < 0) { /* verif processus acquisition */ | |||||
| ENDT=1; | |||||
| write(p1[1],"\n",1); | |||||
| } | |||||
| free(cmd); | |||||
| cmd = readline("O-> "); | |||||
| if ((n2 = strlen(cmd)) > 0) { | |||||
| write(p1[1],"\n",1); | |||||
| add_history(cmd); | |||||
| switch (*cmd) { | |||||
| case '+' : | |||||
| if (*(cmd+1) != '\0') { | |||||
| if (litligne(cmd+1)) { /* ajout au fichier fauth */ | |||||
| if (debloqueIP(cmd+1,NULL)) printf("Element non valable !\n"); | |||||
| else { | |||||
| if (printQ("ajouter au fichier parametres")) | |||||
| ajoutParam(fauth,cmd+1); | |||||
| listeAllow(); | |||||
| } | } | ||||
| printf("Trace niveau %d\n",Trace); | |||||
| break; | |||||
| case 'a' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* ok",CHLOG,CUT6,SUNIC); | |||||
| system(com); | |||||
| break; | |||||
| case 'i' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* DENY",CHLOG,CUT6,SUNIC); | |||||
| system(com); | |||||
| break; | |||||
| case 'e' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* ACCEPT",CHLOG,CUT6,SUNIC); | |||||
| system(com); | |||||
| break; | |||||
| case 'E' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s",NPROG,pid,".*ERR: ",CHLOG); | |||||
| system(com); | |||||
| break; | |||||
| case 'L' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid,CHLOGREP,"-v 'Re[pq]. '"); | |||||
| system(com); | |||||
| break; | |||||
| case 'T' : | |||||
| if (*(cmd+1) != '\0') | |||||
| sprintf(com,"grep '%s\\[%d\\].*%s' %s%s",NPROG,pid,cmd+1,CHLOGREP," 'Re[pq]. '"); | |||||
| else | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid,CHLOGREP," 'Re[pq]. '"); | |||||
| system(com); | |||||
| prInOut(); | |||||
| break; | |||||
| case '>' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid,CHLOGREP," 'Req. '",CUT7S,SUNIC); | |||||
| system(com); | |||||
| prInOut(); | |||||
| break; | |||||
| case '<' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid,CHLOGREP," 'Rep. '",CUT7S,SUNIC); | |||||
| system(com); | |||||
| prInOut(); | |||||
| break; | |||||
| case 'r' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"%s -L|grep %s%s%s",IPT,DREJ,AWK5,SUNIC); | |||||
| pr_encours(); | |||||
| system(com); | |||||
| break; | |||||
| case 'R' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"%s -L|grep %s%s%s",IP6T,DREJ,AWK4,SUNIC); | |||||
| pr_encours(); | |||||
| system(com); | |||||
| break; | |||||
| case 'S' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| RUN = 0; | |||||
| REQ = 0; | |||||
| write(p1[1],"\n",1); | |||||
| break; | |||||
| case 'V' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| printf("Version %s\n",Version); | |||||
| prInOut(); | |||||
| break; | |||||
| case ' ' : | |||||
| if (*(cmd+1) != '\0') system(cmd+1); | |||||
| break; | |||||
| default : | |||||
| printf("+url\t: Allow (autoriser une Url)\n"); | |||||
| printf("-url\t: Deny (interdire une Url)\n"); | |||||
| printf("a\t: Autorisations suivant analyse\n"); | |||||
| printf("i\t: Interdictions suivant analyse\n"); | |||||
| printf("e\t: Exceptions suivant analyse\n"); | |||||
| printf("E\t: Liste des erreurs\n"); | |||||
| printf("l\t: Liste des elements dynamiques\n"); | |||||
| printf("L\t: Logs du systeme\n"); | |||||
| printf("r\t: Rejets actifs IPv4 (dure plusieurs sec.)\n"); | |||||
| printf("R\t: Rejets actifs IPv6 (dure plusieurs sec.)\n"); | |||||
| printf("S\t: Stopper\n"); | |||||
| printf("t+|-\t: Niveau de trace : 0 (off) => 3\n"); | |||||
| printf("T[mot]\t: Traces des demandes/reponses contenant mot\n"); | |||||
| printf(">\t: Traces des demandes triees\n"); | |||||
| printf("<\t: Traces des reponses triees\n"); | |||||
| printf("V\t: Version\n"); | |||||
| break; | |||||
| } | |||||
| } | |||||
| } else printf("Erreur ajout param. !\n"); | |||||
| } else listeAllow(); | |||||
| break; | |||||
| case '-' : | |||||
| if (*(cmd+1) != '\0') { | |||||
| if (litligne(cmd)) { /* ajout au fichier fauth */ | |||||
| if (rebloqueIP(cmd+1)) printf("Element non valable !\n"); | |||||
| else { | |||||
| if (printQ("ajouter au fichier parametres")) | |||||
| ajoutParam(fauth,cmd); | |||||
| listeDeny(); | |||||
| } | |||||
| } else printf("Erreur ajout param. !\n"); | |||||
| } else listeDeny(); | |||||
| break; | |||||
| case 'l' : | |||||
| listElt(cmd[1]); | |||||
| printf(" %s Utilise %d elts/%d : %.2f%% (Max. %d)!\n",ctime(&tim1),iT, | |||||
| NBT, (float)(iT*100)/(float)NBT, MaxElt); | |||||
| prInOut(); | |||||
| break; | |||||
| case 't' : | |||||
| if (*(cmd+1) != '\0') { | |||||
| if ((cmd[1] == '+') || (cmd[1] == '-')) { | |||||
| if ((cmd[1] == '+') && (Trace < TMAX)) Trace++; | |||||
| else { | |||||
| if ((cmd[1] == '-') && (Trace > TMIN)) Trace--; | |||||
| else printf("Erreur: niveau dans [%d, %d].\n",TMIN,TMAX); | |||||
| } | |||||
| } else printf("Erreur: Utiliser t+ ou t- !\n"); | |||||
| } | |||||
| printf(" Trace niveau %d\n",Trace); | |||||
| break; | |||||
| case 'a' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* ok", | |||||
| CHLOG,CUT6,SUNIC); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'i' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* DENY", | |||||
| CHLOG,CUT6,SUNIC); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'e' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s%s%s",NPROG,pid,".* ACCEPT", | |||||
| CHLOG,CUT6,SUNIC); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'E' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]%s' %s",NPROG,pid,".*ERR: ",CHLOG); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'L' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid, | |||||
| CHLOGREP,"-v 'Re[pq]. '"); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'T' : | |||||
| if (*(cmd+1) != '\0') | |||||
| sprintf(com,"grep '%s\\[%d\\].*%s' %s%s",NPROG,pid,cmd+1, | |||||
| CHLOGREP," 'Re[pq]. '"); | |||||
| else | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s",NPROG,pid, | |||||
| CHLOGREP," 'Re[pq]. '"); | |||||
| comsh(com); | |||||
| prInOut(); | |||||
| break; | |||||
| case '>' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid, | |||||
| CHLOGREP," 'Req. '",CUT7S,SUNIC); | |||||
| comsh(com); | |||||
| prInOut(); | |||||
| break; | |||||
| case '<' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"grep '%s\\[%d\\]' %s%s%s%s",NPROG,pid, | |||||
| CHLOGREP," 'Rep. '",CUT7S,SUNIC); | |||||
| comsh(com); | |||||
| prInOut(); | |||||
| break; | |||||
| case 'r' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"%s -L|grep %s%s%s",IPT,DREJ,AWK5,SUNIC); | |||||
| pr_encours(); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'R' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| sprintf(com,"%s -L|grep %s%s%s",IP6T,DREJ,AWK4,SUNIC); | |||||
| pr_encours(); | |||||
| comsh(com); | |||||
| break; | |||||
| case 'S' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| RUN = 0; | |||||
| REQ = 0; | |||||
| write(p1[1],"\n",1); | |||||
| break; | |||||
| case 'V' : | |||||
| if (*(cmd+1) != '\0') printf("ignore %s\n",cmd+1); | |||||
| printf("Version %s\n",Version); | |||||
| prInOut(); | |||||
| break; | |||||
| case ' ' : | |||||
| if (*(cmd+1) != '\0') comsh(cmd+1); | |||||
| break; | |||||
| default : | |||||
| printf("+url\t: Allow (autoriser une Url)\n"); | |||||
| printf("-url\t: Deny (interdire une Url)\n"); | |||||
| printf("a\t: Autorisations suivant analyse\n"); | |||||
| printf("i\t: Interdictions suivant analyse\n"); | |||||
| printf("e\t: Exceptions suivant analyse\n"); | |||||
| printf("E\t: Liste des erreurs\n"); | |||||
| printf("l[+|-]\t: Liste des elements dynamiques\n"); | |||||
| printf("L\t: Logs du systeme\n"); | |||||
| printf("r\t: Rejets actifs IPv4 (dure plusieurs sec.)\n"); | |||||
| printf("R\t: Rejets actifs IPv6 (dure plusieurs sec.)\n"); | |||||
| printf("S\t: Stopper\n"); | |||||
| printf("t+|-\t: Niveau de trace : 0 (off) => 3\n"); | |||||
| printf("T[mot]\t: Traces des demandes/reponses contenant mot\n"); | |||||
| printf(">\t: Traces des demandes triees\n"); | |||||
| printf("<\t: Traces des reponses triees\n"); | |||||
| printf("V\t: Version\n"); | |||||
| break; | |||||
| } | |||||
| } | |||||
| } | } | ||||
| write_history(FHISTO); | write_history(FHISTO); | ||||
| free(cmd); | free(cmd); | ||||
| @@ -1018,8 +1062,9 @@ int Inter=0, LogC=0, i, ie, np=0, opt; | |||||
| REQ = 0; | REQ = 0; | ||||
| break; | break; | ||||
| case 'L' : | case 'L' : | ||||
| printf("Reste %d elts !\n",iT); | |||||
| listElt(); | |||||
| listElt(cmd[1]); | |||||
| printf(" %s Utilise %d elts/%d : %.2f%% (Max. %d)!\n", | |||||
| ctime(&tim1),iT,NBT,(float)(iT*100)/(float)NBT,MaxElt); | |||||
| break; | break; | ||||
| case 'S' : | case 'S' : | ||||
| RUN = 0; | RUN = 0; | ||||
| @@ -1042,7 +1087,7 @@ int Inter=0, LogC=0, i, ie, np=0, opt; | |||||
| close(p1[1]); | close(p1[1]); | ||||
| closelog(); | closelog(); | ||||
| if (ENDT) { /* relance auto */ | if (ENDT) { /* relance auto */ | ||||
| system("reset"); | |||||
| comsh("reset"); | |||||
| if (T1) printf("Relance auto %s dans %d sec. ...\n",strPID, DELAYR); | if (T1) printf("Relance auto %s dans %d sec. ...\n",strPID, DELAYR); | ||||
| sleep(DELAYR); /* attend N s */ | sleep(DELAYR); /* attend N s */ | ||||
| NP = (char**)malloc((sizeof(Pars))*(N+3)); | NP = (char**)malloc((sizeof(Pars))*(N+3)); | ||||