Pasar de const u_char* a char* en c++

Iniciado por Kaxperday, 4 Julio 2015, 18:37 PM

0 Miembros y 2 Visitantes están viendo este tema.

Kaxperday

#10
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:

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:

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:

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:

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.
Cuando el poder económico parasita al político ningún partido ni dictador podrá liberarnos de él. Se reserva el 99% ese poder.