我正在尝试从tcp检索ack,就像wireshark返回的一样。在wireshark中,它返回ack为1或647。但是当我试图从数据包中获取ack时,它返回一个很长的数字,与ack wireshark返回的没有任何相似之处。
我得到了这些acks:
1918004163 3350411129 3083820792 1730247758 3668869711 4218577993
这是我的代码:
if (packet.hasHeader(tcp) && packet.hasHeader(ip)) {
long tcpack = packet.getHeader(tcp).ack();
String name = packet.getHeader(tcp).getName();
int urgent = packet.getHeader(tcp).urgent();
int windowScaled = packet.getHeader(tcp).windowScaled();
int window = packet.getHeader(tcp).window();
int wirelen = packet.getCaptureHeader().wirelen();
// System.out.println("WireLen: "+wirelen);
int caplen = packet.getCaptureHeader().caplen();
// System.out.println("caplen: "+caplen);
String ipTypeString = ip.typeEnum().toString();
// System.out.println("IP Type: "+ipTypeString);
String ipDescription = ip.getDescription();
// System.out.println("IP Description: "+ipDescription);
byte[] dIP = packet.getHeader(ip).destination();
byte[] sIP = packet.getHeader(ip).source();
String sourceIP = FormatUtils.ip(sIP);
// System.out.println("Source IP: "+sourceIP);
String destinationIP = FormatUtils.ip(dIP);
// System.out.println("Destination IP: "+destinationIP);
int tcpPORTSource = tcp.source();
// System.out.println("TCP PORT Source:
// "+tcpPORTSource);
int tcpPORTDestination = tcp.destination();
// System.out.println("TCP PORT Destination:
// "+tcpPORTDestination);
if (sourceIP.equals("someip") && tcpPORTSource == 0000 && ipTypeString.equals("TCP")
&& wirelen == 1514) {
// System.out.println("TCP ack: "+tcpack+" name: "+name+ " urgent: "+urgent + " window scaled: "+windowScaled+ " window: "+window);
}如何检索与wireshark相同的ACK值?
发布于 2016-11-18 13:45:06
你不能。你在wireshark中看到的数字是在No.列中的数字,对吧?它们由wireshark分配,而不是数据包中提供的信息。

发布于 2016-11-19 02:06:52
Wireshark默认情况下显示TCP数据包的相对序列号。(即相对于在TCP连接开始时使用的实际序列号的序列号)。这使得查看/使用序列号变得更容易。
Wireshark中的TCP协议下有一个首选项,用于显示TCP绝对序列号( TCP数据包中实际使用的序列号)。
将Wirehark配置为显示绝对TCP序列号后,我希望它们与您使用代码获得的值相匹配。
读者练习:为什么每个TCP连接不以实际序列号1开头?:) :)
https://stackoverflow.com/questions/40657339
复制相似问题