número de secuencia de impresión de un paquete olfateó
-
20-09-2019 - |
Pregunta
Estoy utilizando pcap para crear un analizador de paquetes.
tengo esta estructura tcp:
typedef struct TSP_header{
unsigned short int sport;
unsigned short int dport;
unsigned int seqnum;
unsigned int acknum;
unsigned char reserved:4, offset:4;
unsigned int
tcp_res1:4, //little-endian
tcph_hlen:4, //length of tcp header in 32-bit words
tcph_fin:1, //Finish flag "fin"
tcph_syn:1, //Synchronize sequence numbers to start a connection
tcph_rst:1, //Reset flag
tcph_psh:1, //Push, sends data to the application
tcph_ack:1, //acknowledge
tcph_urg:1, //urgent pointer
tcph_res2:2;
unsigned short int tcph_win;
unsigned short int tcph_chksum;
unsigned short int tcph_urgptr;
}TSP_header;
¿Cómo puedo imprimir el número de secuencia?
debo usar htons (sequence_number) ?? porque no está funcionando de esta manera !!
mi otra pregunta es ¿cuál es el número después de la declaración de variables?
¿qué significa 4 en tcph_hlen: 4
Solución
Si el lenguaje de programación es C, tenga en cuenta que su estructura es incorrecta, ya que no se especifica el tamaño de los campos. Por ejemplo, el número de secuencia es de 32 bits y "int" pueden ser de 16 o 64 bits. Para SEQNUM, se debe utilizar uint32_t.
Dicho esto, si usted ha leído el paquete TCP desde la red, el número de secuencia está en el orden de red (big-endian) y por lo tanto, imprimirlo, es necesario llamar a ntohl (red de acoger - largo).