#include #include #include typedef struct IP { int n1, n2, n3, n4; struct IP *prox; } IP_t; void InserisciLista(IP_t **p_lista, int n1, int n2, int n3, int n4); int main(int argc, char *argv[]) { FILE *f; char filename[30] = "IPlog.txt"; IP_t *lista = NULL, *p; int n1, n2, n3, n4; f = fopen(filename, "rt"); if (f == NULL) { printf("ERRORE: problema apertura in lettura (%s)\n", filename); return -1; } int FINE = 0; while (!feof(f)) { FINE = (fscanf(f, "%d.%d.%d.%d#", &n1, &n2, &n3, &n4) != 4); if (!FINE && !feof(f)) { /*printf("%d %d %d %d\n", n1, n2, n3, n4); */ if ((n1 == 231) && (n3 == 232)) { /* aggiorna la lista */ InserisciLista(&lista, n1, n2, n3, n4); } } } fclose(f); int cont; for (p = lista, cont = 0; p != NULL; p = p->prox, cont++); /* printf("IP sospetti: %d\n", cont); */ printf("%d\n", cont); return 0; } void InserisciLista(IP_t **p_lista, int n1, int n2, int n3, int n4) { /* inserisce un elemento nella lista solo se l'elemento non รจ presente */ IP_t *p; int PRESENTE = 0; p = *p_lista; while ((p != NULL) && (PRESENTE == 0)) { if (p->n1 == n1 && p->n2 == n2 && p->n3 == n3 && p->n4 == n4) PRESENTE = 1; else p = p->prox; } if (PRESENTE == 0) { /* inserisce il nuovo valore in testa alla lista */ /* la ricerca sarebbe piu' rapida se l'inserimento fosse ordinato, ma dati i numeri in gioco non ne vale la pena */ p = malloc(sizeof(IP_t)); if (p == NULL) { printf("Errore allocamento\n"); exit(-1); } p->n1 = n1; p->n2 = n2; p->n3 = n3; p->n4 = n4; p->prox = *p_lista; *p_lista = p; } }