Buenas!! hace un par de semanas se me ocurrió hacer un programa para ver conversaciones de chat de tuenti que habia capturado con un mitm y un sniffer. Se me ocurrió "generalizarlo", y ahora lo que hace es copiar todo lo que se encuentre entre una "cadena de inicio" y una "cadena de fin". Hay que darle un archivo para leer y otro para guardar las conversaciones, o lo que queramos "filtrar".
Aquí teneis el código:
Tengo también el primero que hice especifico para tuenti, que ademas te pone de quien es el mensaje y para quien (con direcciones de correo de tuenti). Si alguien lo quiere puedo postearlo.
También estoy abierto a sugerencias sobre mejoras en el programa.
Espero que le sirva a alguien!!
PD: siento la falta de comentarios en el código, pero si alguien no lo entiende puedo explicarselo o editarlo con comentarios.
Aquí teneis el código:
Código (c) [Seleccionar]
#include <stdio.h>
#define TMENSAJE 1000
// Funciones
int sizeoffile(char Narchivo[]); // DONE
int sizeofstring(char cadena[]); // DONE
void BInicio(char texto[], int size); // DONE
void Cmensaje(char cadenaF[], char texto[], int posicion, char AEscritura[], int sizeoffin); // DONE
int BFin(char texto[], char cadenaF[], int posicion, int sizeoffin); // DONE
int main(){
char ALectura[30];
printf("Archivo de lectura: ");
scanf("%s", &ALectura);
int sizeL = sizeoffile(ALectura);
char texto[sizeL];
FILE *archivo;
archivo = fopen(ALectura, "r");
int i = 0;
for (i = 0; i < sizeL; i++){
texto[i] = fgetc(archivo);
if (texto[i] == EOF){
break;
}
}
fclose(archivo);
BInicio(texto, sizeL);
return 0;
}
int sizeoffile(char Narchivo[]){
FILE *archivo;
archivo = fopen(Narchivo, "r");
int i = 0;
while (fgetc(archivo) != EOF){
i++;
}
fclose(archivo);
return i;
}
int sizeofstring(char cadena[]){
int i = 0;
while (cadena[i] != '\0'){
i++;
}
return i;
}
void BInicio(char texto[], int size){
char CInicio[50];
printf("Cadena de inicio: ");
scanf("%s", &CInicio);
char CFin[50];
printf("Cadena de fin: ");
scanf("%s", &CFin);
char AEscritura[30];
printf("Archivo de escritura: ");
scanf("%s", &AEscritura);
int sizeofinicio = sizeofstring(CInicio);
int sizeoffin = sizeofstring(CFin);
int i = 0;
int j = 0;
int cont = 0;
for (i = 0; i < size; i++){
for (j = 0; j < sizeofinicio; j++){
if (i-j >= 0){
if (texto[i+j] == CInicio[j]){
cont++;
}else{
cont = 0;
}
if (cont == sizeofinicio){
Cmensaje(CFin, texto, i+sizeofinicio, AEscritura, sizeoffin);
cont = 0;
}
}
}
}
}
void Cmensaje(char cadenaF[], char texto[], int posicion, char AEscritura[], int sizeoffin){
FILE *archivo;
archivo = fopen(AEscritura, "a");
char mensaje[TMENSAJE];
int i = 0;
int j = 0;
int k = 0;
int cont = 0;
for (i = posicion; i < (posicion+TMENSAJE); i++){
mensaje[k] = texto[i];
k++;
for (j = 0; j < sizeoffin; j++){
if (texto[i+j] == cadenaF[j]){
cont++;
}else{
cont = 0;
}
if (cont == sizeoffin){
i = (posicion+TMENSAJE);
mensaje[k-1] = 0;
}
}
}
fprintf(archivo, "\n %s", mensaje);
fclose(archivo);
}
int BFin(char texto[], char cadenaF[], int posicion, int sizeoffin){
int i = 0;
int j = 0;
int cont = 0;
for (i = 0; i < TMENSAJE; i++){
for (j = 0; j < sizeoffin; j++){
if (i-j >= 0){
if (texto[i+j] == cadenaF[j]){
cont++;
}else{
cont = 0;
}
if (cont == sizeoffin){
cont = 0;
return 1;
}
}
}
}
return 0;
}
Tengo también el primero que hice especifico para tuenti, que ademas te pone de quien es el mensaje y para quien (con direcciones de correo de tuenti). Si alguien lo quiere puedo postearlo.
También estoy abierto a sugerencias sobre mejoras en el programa.
Espero que le sirva a alguien!!
PD: siento la falta de comentarios en el código, pero si alguien no lo entiende puedo explicarselo o editarlo con comentarios.