Simplemente la duda era esa que no sabía como pasar ese const u_char* a char*, pero no me di cuenta que con un simple if se hacía fácilmente:
Y para poder hacer esto había que hacer antes una conversión de const u_char* a u_char* con (u_char*) o un const_cast. Aquí la llamada a la función:
Ahora estoy trasteando con el HTTPS, el contenido del paquete HTTPS al igual que el de HTTP comienza desde el byte 52, la diferencia que en HTTP estaba en texto plano y se podía ver todo con mostrar los caracteres alfanuméricos como hacía con el if, sin embargo en el HTTPS aparecen caracteres fuera de ese rango porque está cifrado, ahora tendré que intentar romperlo, haciendo de proxy, implementar un sslstrip vaya.
Edito: Y ya si es con DNS2PROXY ni te cuento, una máquina de hacking en la red.
Saludos.
Edito:
¿Alguien sabe que falla en este código que hace que se almacenen mismos ip/mac en la lista de hosts (usuarios)?
Salida:
Como se puede observar a pesar de que las cadenas de ip/mac son iguales entra en la lista.
Saludos.
Código [Seleccionar]
c = data[i]; // u_char
a = (c >= 32 && c <= 128) ? (unsigned char)c : '.';
Y para poder hacer esto había que hacer antes una conversión de const u_char* a u_char* con (u_char*) o un const_cast. Aquí la llamada a la función:
Código [Seleccionar]
PrintData((u_char*)pkt_data, header->len);
Ahora estoy trasteando con el HTTPS, el contenido del paquete HTTPS al igual que el de HTTP comienza desde el byte 52, la diferencia que en HTTP estaba en texto plano y se podía ver todo con mostrar los caracteres alfanuméricos como hacía con el if, sin embargo en el HTTPS aparecen caracteres fuera de ese rango porque está cifrado, ahora tendré que intentar romperlo, haciendo de proxy, implementar un sslstrip vaya.
Edito: Y ya si es con DNS2PROXY ni te cuento, una máquina de hacking en la red.
Saludos.
Edito:
Código [Seleccionar]
void lista_usuarios::insertar_host(u_char* ip, u_char* mac)
{
int salida;
printf("CONTENIDO LISTA************\n");
for (int i = 0; i < usuarios.size(); i++)
{
for (int j = 0; j < 4; j++)
{
printf("%x", usuarios[i].ip[j]);
}
printf(" ");
for (int j = 0; j < 6; j++)
{
printf("%x", usuarios[i].mac[j]);
}
printf("\n");
}
printf("CONTENIDO IPS Y MAC***********\n");
for (int j = 0; j < 4; j++)
{
printf("%x", ip[j]);
}
printf(" ");
for (int j = 0; j < 6; j++)
{
printf("%x", mac[j]);
}
printf("\n");
for (int i = 0; i < usuarios.size(); i++)
{
salida = 0;
for (int j = 0; j < 4; j++)
{
if (ip[j] != usuarios[i].ip[j])
{
salida++;
break;
}
}
for (int j = 0; j < 6; j++)
{
if (mac[j] != usuarios[i].mac[j])
{
salida++;
break;
}
}
//printf("cont %d cant %d\n", cont, cant);
if (salida >= 2)
{
printf(" ENTRA \n");
host usuario;
for (int j = 0; j < 4; j++)
{
usuario.ip[j] = ip[j];
}
for (int j = 0; j < 6; j++)
{
usuario.mac[j] = mac[j];
}
usuarios.push_back(usuario);
break;
}
}
if (usuarios.size() == 0)
{
host usuario;
for (int j = 0; j < 4; j++)
{
usuario.ip[j] = ip[j];
}
for (int j = 0; j < 6; j++)
{
usuario.mac[j] = mac[j];
}
usuarios.push_back(usuario);
}
¿Alguien sabe que falla en este código que hace que se almacenen mismos ip/mac en la lista de hosts (usuarios)?
Salida:
Código [Seleccionar]
CONTENIDO IPS Y MAC***********
ac1a063 0f664d3eec
CONTENIDO LISTA************
ac1a063 0f664d3eec
CONTENIDO IPS Y MAC***********
ac1a066 1867b08d6fb6
ENTRA
CONTENIDO LISTA************
ac1a063 0f664d3eec
ac1a066 1867b08d6fb6
CONTENIDO IPS Y MAC***********
ac1a072 8086f299043
ENTRA
CONTENIDO LISTA************
ac1a063 0f664d3eec
ac1a066 1867b08d6fb6
ac1a072 8086f299043
CONTENIDO IPS Y MAC***********
ac1a0ab 026733da20
ENTRA
CONTENIDO LISTA************
ac1a063 0f664d3eec
ac1a066 1867b08d6fb6
ac1a072 8086f299043
ac1a0ab 026733da20
CONTENIDO IPS Y MAC***********
ac1a063 0f664d3eec
ENTRA
CONTENIDO LISTA************
ac1a063 0f664d3eec
ac1a066 1867b08d6fb6
ac1a072 8086f299043
ac1a0ab 026733da20
ac1a063 0f664d3eec
CONTENIDO IPS Y MAC***********
ac1a066 1867b08d6fb6
ENTRA
Como se puede observar a pesar de que las cadenas de ip/mac son iguales entra en la lista.
Saludos.