RAW SOCKET recv()

di il
2 risposte

RAW SOCKET recv()

Salve a tutti, ho delle difficoltà con le raw socket e non ne capisco il motivo:

##########################

int buffer_len ;
unsigned char* buffer = (unsigned char *) malloc(65565);

int socket = socket(AF_INET,SOCK_RAW,IPPROTO_UDP);

struct sockaddr_in temp;
temp.sin_family = AF_INET; //famiglia AF_INET
temp.sin_addr.s_addr = INADDR_ANY; //vengono accettati dati da qualunque parte provengano
temp.sin_port = htons(port); //è necessario convertire la porta secondo l'ordine corretto dei bit (LittleEndian)

int bound = bind(socket,(struct sockaddr*) &temp,sizeof(temp));

if (bound > -1){
while ((buffer_len = recv(socket,buffer,sizeof(buffer),0)) < 0);
printf("%s \n",buffer);
free(buffer);
}

###########################

Il fatto è che quando tento di stampare il pacchetto catturato, viene stampata una E e null'altro, nonostante buffer_len riporti una lunghezza di svariati caratteri.
Premetto di essere nuovo con il c e probabilmente è una cavolata ma non so dove possa essere il problema.

2 Risposte

  • Re: RAW SOCKET recv()

    Non penserai di visualizzare così il contenuto del buffer. Sono valori binari mischiati a dati leggibili, quindi devi visualizzare byte per byte in esadecimale. Poi quello che ti aspetti che ci sia nel pacchetto è un altro discorso.
  • Re: RAW SOCKET recv()

    Risolto grazie mille!
Devi accedere o registrarti per scrivere nel forum
2 risposte