打印嗅探包的序列号

时间:2010-03-18 16:57:34

标签: c packet-capture pcap packet-sniffers

我正在使用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

1 个答案:

答案 0 :(得分:0)

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

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