PDA

Visualizza la versione completa : [C] - Problema con Raw Sockets


erpupone10
06-06-2008, 10:49
Ciao a tutti,
sto realizzando un progettino che effettua TCP/IP Tunneling (http://it.wikipedia.org/wiki/Tunneling) utilizzando le Raw Sockets su piattaforma UNIX in linguaggio C.
Io creo "manualmente" gli header TCP e IP mettendo i vari byte in vettori di char che poi voglio concatenare al messaggio vero e proprio (una stringa) e spedire via raw socket.
Ho il seguente problema, quando vado a scrivere negli header TCP e IP dei valori esadecimali '0x00' oppure il carattere '0' le funzioni che utilizzo per creare la stringa da inviare li interpretano come terminatori quindi il programma: si blocca se uso una memcpy oppure mi compatta gli spazi null se uso strcpy o strcat..
Quindi l'entitÓ che riceve il pacchetto lo riceve privato dei caratteri 0x00 che invece sono fondamentali nella costruzione dei pacchetti TCP e IP.
La mia domanda Ŕ: c'Ŕ il modo di creare una stringa o vettore di caratteri contenente dei caratteri 0x00 o '0' in modo che l'applicazione non li interpreti come terminatori?
Mi conviene utilizzare un altro tipo di dato per memorizzare le informazioni?

Grazie

Ciao

Giova

810106
06-06-2008, 13:55
Semplice, tratta l'header e la stringa come due oggetti separati e poi li invii.
legge l'header, lo verifica e poi legge la stringa.



char *buffer[SIZE];
char *header, *string;
int fd;

memset(buffer, 0, sizeof(buffer));
header = buffer;
string = buffer + HEADER-LENGTH;

/* crea socket */
...
/* lavora sull'header */
memcpy(header, X, X);
/* lavora sulla stringa */
memcpy(string, X, X);
/* invia */
write(fd, buffer, sizeof(buffer));

erpupone10
07-06-2008, 13:26
Grazie mille

adesso funziona

Ciao

Giovanni

Loading