[英]Negative TCP Sequence Numbers (C, LibPcap, TCP)
I'm working with libpcap and having trouble accessing the sequence number variable from this struct. 我正在使用libpcap,无法从此结构中访问序列号变量。
To get the TCP sequence number i'm now using ntohl(tcp->th_seq)
and it gives me some sequence numbers in the positive and they seem to be valid (in wireshark) but it's also giving me a lot of negative TCP numbers. 为了获得TCP序列号,我现在正在使用
ntohl(tcp->th_seq)
,它给了我一些正数的序列号,它们似乎是有效的(在wireshark中),但它也给了我很多负的TCP数字。
Am I accessing the variable wrong or do the negative TCP numbers need to be converted some how? 我是否错误地访问变量或者是否需要转换负数TCP数字?
struct sniff_tcp *tcp;
typedef u_int tcp_seq;
struct sniff_tcp {
u_short th_sport; /* source port */
u_short th_dport; /* destination port */
tcp_seq th_seq; /* sequence number */
tcp_seq th_ack; /* acknowledgement number */
u_char th_offx2; /* data offset, rsvd */
#define TH_OFF(th) (((th)->th_offx2 & 0xf0) >> 4)
u_char th_flags;
#define TH_FIN 0x01
#define TH_SYN 0x02
#define TH_RST 0x04
#define TH_PUSH 0x08
#define TH_ACK 0x10
#define TH_URG 0x20
#define TH_ECE 0x40
#define TH_CWR 0x80
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG|TH_ECE|TH_CWR)
u_short th_win; /* window */
u_short th_sum; /* checksum */
u_short th_urp; /* urgent pointer */
};
-----Console:-----------------------------------
Packet number 24:
current time: 2015-04-10 14:14:48.990
From: x.x.x.x
To: y.y.y.y
Protocol: TCP
Src port: 443
Dst port: 53111
Seq Num: 943553986 // This is valid in wireshark
ACK Detected
Packet number 25:
current time: 2015-04-10 14:14:48.990
From: x.x.x.x
To: y.y.y.y
Protocol: TCP
Src port: 53111
Dst port: 443
Seq Num: -1759841006 // I'm not sure what to make of this
ACK Detected
You're not showing how you print the number. 您没有显示如何打印该号码。 Probably you're just printing using the wrong format specifier.
可能你只是使用错误的格式说明符进行打印。 The number returned by
ntohl()
is of type uint32_t
so it must be printed like this: ntohl()
返回的数字是uint32_t
类型,所以它必须像这样打印:
#include <inttypes.h>
printf("%" PRIu32, ntohl(tcp->th_seq));
Here PRIu32
is the proper format specifier for your platform to print a 32-bit unsigned integer. 这里
PRIu32
是您的平台打印32位无符号整数的正确格式说明符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.