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

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top