Necesito ayuda urgente!!!!!!
Necesito ayuda urgente. Os planteo mi problema.
Tengo un fichero que contiene el tráfico que se ha producido en una red (hora, min, ss,direccion de origen y destino... hay una entrada por cada paquete que se han intercambiado cada par de estaciones). Bueno, pues tengo que sacar estadísticas cada 2 minutos y cada 10 por cada par de estaciones. Tengo que coger un par origen y destino y encontrar todas las entradas que hay en 2 minutos, mirar los bytes que se han envidado, el tipo de trama...
No se como hacerlo y hay que tener en cuenta que el fichero es muy grande alrededor de 600MB.
Necesito una luz, porque estoy un poco perdida. Muchas gracias.
Aqui teneis una parte del fichero:
17:25:43.921625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 30976
17:25:43.921625 IP 192.168.82.18 > 192.168.82.17: icmp 40: echo reply seq 30976
17:25:43.931625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 31232
17:25:43.931625 IP 192.168.82.18 > 192.168.82.17: icmp 40: echo reply seq 31232
17:25:44.921625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 31488
17:25:44.921625 IP 192.168.82.18 > 192.168.82.17: icmp 40: echo reply seq 31488
17:25:45.181625 IP 192.168.82.18 > 192.168.82.11: icmp 1480: echo request seq 9984
17:27:27.051625 IP 192.168.82.22.1221 > 195.245.248.2.8080: P 10335:10957(622) ack 17134 win 7314
17:27:27.051625 IP 195.245.248.2.8080 > 192.168.82.22.1220: P 43176:43337(161) ack 9542 win 16560
17:27:27.061625 IP 192.168.82.22.1220 > 195.245.248.2.8080: P 9542:10164(622) ack 43337 win 7153
17:27:27.061625 IP 195.245.248.2.8080 > 192.168.82.22.1221: P 17134:17295(161) ack 10957 win 16560
Tengo un fichero que contiene el tráfico que se ha producido en una red (hora, min, ss,direccion de origen y destino... hay una entrada por cada paquete que se han intercambiado cada par de estaciones). Bueno, pues tengo que sacar estadísticas cada 2 minutos y cada 10 por cada par de estaciones. Tengo que coger un par origen y destino y encontrar todas las entradas que hay en 2 minutos, mirar los bytes que se han envidado, el tipo de trama...
No se como hacerlo y hay que tener en cuenta que el fichero es muy grande alrededor de 600MB.
Necesito una luz, porque estoy un poco perdida. Muchas gracias.
Aqui teneis una parte del fichero:
17:25:43.921625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 30976
17:25:43.921625 IP 192.168.82.18 > 192.168.82.17: icmp 40: echo reply seq 30976
17:25:43.931625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 31232
17:25:43.931625 IP 192.168.82.18 > 192.168.82.17: icmp 40: echo reply seq 31232
17:25:44.921625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 31488
17:25:44.921625 IP 192.168.82.18 > 192.168.82.17: icmp 40: echo reply seq 31488
17:25:45.181625 IP 192.168.82.18 > 192.168.82.11: icmp 1480: echo request seq 9984
17:27:27.051625 IP 192.168.82.22.1221 > 195.245.248.2.8080: P 10335:10957(622) ack 17134 win 7314
17:27:27.051625 IP 195.245.248.2.8080 > 192.168.82.22.1220: P 43176:43337(161) ack 9542 win 16560
17:27:27.061625 IP 192.168.82.22.1220 > 195.245.248.2.8080: P 9542:10164(622) ack 43337 win 7153
17:27:27.061625 IP 195.245.248.2.8080 > 192.168.82.22.1221: P 17134:17295(161) ack 10957 win 16560
Probablemente se pueda utilizar la funcion:
int fscanf( FILE *fp, const char format[, address, ... ] );
Levantando cada linea del fichero y haciendo algo
parecido a:
#include <stdio.h>
#include <stdlib.h>
typedef struct tm
{
int hora, min, seg;
long mili;
};
typedef struct ips
{
int a, b, c, d;
};
void main( void )
{
tm t;
ips ip1, ip2;
long seg;
FILE *fp;
char dummy[20];
if(!(fp=fopen("c:\log.txt", "rt")))
{
printf("FATAL ERROR abriendo archivo de entradan");
exit( 1 );
}
int icmp;
int nro = 15;
while( !feof(fp) && nro==15)
{
nro = fscanf( fp, "%d:%d:%d.%ld IP %d.%d.%d.%d > %d.%d.%d.%d: icmp %d: echo %s seq %ldn",
&t.hora, &t.min, &t.seg, &t.mili, &ip1.a, &ip1.b, &ip1.c, &ip1.d,
&ip2.a, &ip2.b, &ip2.c, &ip2.d, &icmp,dummy, &seg );
}
fclose( fp );
}
Con este codigo parseas el primer formato de linea
de tu log:
17:25:43.921625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 30976
habria que hacer algo similar para el segundo formato y determinar si no hay otros patrones
de formato, si no tenes mucha variedad de formatos
con la funcion fscanf podes andar, sino hay que
hacer una logica de parser un poco mas elaborada.
Si queres mas ayuda no seas amarrete con la
cantidad de log que pasas, y explica un poco como
se interpreta cada tipo de linea ( con tus palabras )
Saludos
Daniel
int fscanf( FILE *fp, const char format[, address, ... ] );
Levantando cada linea del fichero y haciendo algo
parecido a:
#include <stdio.h>
#include <stdlib.h>
typedef struct tm
{
int hora, min, seg;
long mili;
};
typedef struct ips
{
int a, b, c, d;
};
void main( void )
{
tm t;
ips ip1, ip2;
long seg;
FILE *fp;
char dummy[20];
if(!(fp=fopen("c:\log.txt", "rt")))
{
printf("FATAL ERROR abriendo archivo de entradan");
exit( 1 );
}
int icmp;
int nro = 15;
while( !feof(fp) && nro==15)
{
nro = fscanf( fp, "%d:%d:%d.%ld IP %d.%d.%d.%d > %d.%d.%d.%d: icmp %d: echo %s seq %ldn",
&t.hora, &t.min, &t.seg, &t.mili, &ip1.a, &ip1.b, &ip1.c, &ip1.d,
&ip2.a, &ip2.b, &ip2.c, &ip2.d, &icmp,dummy, &seg );
}
fclose( fp );
}
Con este codigo parseas el primer formato de linea
de tu log:
17:25:43.921625 IP 192.168.82.17 > 192.168.82.18: icmp 40: echo request seq 30976
habria que hacer algo similar para el segundo formato y determinar si no hay otros patrones
de formato, si no tenes mucha variedad de formatos
con la funcion fscanf podes andar, sino hay que
hacer una logica de parser un poco mas elaborada.
Si queres mas ayuda no seas amarrete con la
cantidad de log que pasas, y explica un poco como
se interpreta cada tipo de linea ( con tus palabras )
Saludos
Daniel
