繁体   English   中英

嗅探到的数据包的打印序列号

[英]printing sequence number of a sniffed packet

我正在使用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)吗? 因为它不是这样工作的!

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM