jNetPcap确认值

时间:2016-11-17 14:21:59

标签: java networking wireshark jnetpcap

我试图从tcp中检索ack,就像一个wireshark返回的那样。在wireshark中,它返回1或647的确认。但是当我试图从数据包中获取确认时,它返回一个与ack wireshark返回的类似的长数字。

我得到了这些答案:

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相同的确认值?

2 个答案:

答案 0 :(得分:0)

你做不到。 您在wireshark中看到的数字是No.列中的数字,对吧?它们由wireshark分配,而不是数据包中可用的信息。

enter image description here

答案 1 :(得分:0)

默认情况下,Wireshark显示TCP数据包的相对序列号。 (即,相对于TCP连接开始时使用的实际序列号的序列号)。这样可以更轻松地查看/使用序列号。

在Wireshark的TCP协议下,首选显示TCP 绝对序列号(TCP数据包中实际使用的那些)。

配置Wirehark以显示绝对TCP序列号后,我希望它们与您使用代码获得的值相匹配。

为读者练习:为什么每个TCP连接都不以实际序列号1开头? :):)