[英]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.