0

我正在使用 pcap 创建数据包嗅探器。
我有这个 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;    

如何打印序列号?
我应该使用 htons(sequence_number) 吗?因为它不是这样工作的!

我的另一个问题是变量声明后的数字是多少?
tcph_hlen:4 中的 4 是什么意思

4

1 回答 1

0

如果编程语言是 C,请注意您的结构不正确,因为您没有指定字段的大小。例如,序列号是 32 位,“int”可能是 16 位或 64 位。对于 seqnum,您应该使用 uint32_t。

话虽如此,如果您已经从网络读取了 TCP 数据包,则序列号是网络顺序(大端),因此,要打印它,您需要调用 ntohl(网络到主机 - 长)。

于 2010-03-20T12:40:15.213 回答