Re: [Jnetstream-users] Error in TCP decode
Brought to you by:
voytechs
From: Mark B. <voy...@ya...> - 2008-08-05 17:33:11
|
I made changes in there recently. Its possible I screwed up. I hurt my back coming back from Europe yesterday and I can barely sit at the computer right now. Hopefully tomorrow I'll feel better after my visit to the chiropractor today and be able to take a look at the problem quickly. I do have some jUnit test cases checked in that test various BitBuffer conditions in the CommonUtils module. Cheers, mark... > -----Original Message----- > From: jne...@li... > [mailto:jne...@li...] On > Behalf Of Frédéric Dreier > Sent: Tuesday, August 05, 2008 1:10 PM > To: Jne...@li... > Subject: Re: [Jnetstream-users] Error in TCP decode > > Hi, > > I checkout the code from SVN and I thing there is something > odd in the "BitBuffer.readBitsOneAtATime()" method. Its > probably about the posBits which ich not always added to the offset. > > I temporary use the following implementation until a fix is > commited in SVN (This concats the buffer byte per byte > instead bit per bit) > > Regards, > Frédéric > > private static final int[] RIGHT_BIT_MASK = new int[32]; > static { > // initialize mask used by readBitsOneAtATime() > for (int i = 1; i < RIGHT_BIT_MASK.length; i++) { > RIGHT_BIT_MASK[i] = (RIGHT_BIT_MASK[i - 1] << 1) | 1; > } > } > > private int readBitsOneAtATime(int length) { > // basic checks to avoid unnecessary computation > if (length == 0) { > return 0; > } > if (length > 32) { > throw new IndexOutOfBoundsException("0 >= range > <= 32bits"); > } > // value is stored in long since length+posBits > // could be greater than 32. > long value = current; > int acc = 8 - posBits; > // concatenate buffer byte per byte > for (; acc < length; acc += 8) { > // fetch next byte > posBits = 8; > fetch(); > // append new current byte > value = (value << 8) | (current & 0xFF); > } > // right-align the bits and mask high bits > value = (value >> (acc - length)) & RIGHT_BIT_MASK[length]; > // update posBits value > posBits = (posBits + length) % 8; > // return > return (int) value; > } > > > > > > > > > Frédéric Dreier a écrit : > > Hi, > > > > I have some trouble decoding IP and TCP headers. the header length > > and the offset are wrongly decoded in most of the packets. > > > > Did I do something wrong? > > > > Regards, > > Frederic Dreier > > > > > > > > Console output ------------------------------- PACKET DUMP:: > > 00 12 3F 19 FC 3F 00 07 > > 84 BC A0 C0 08 00 45 00 > > 00 28 9D 7A 40 00 2B 06 > > 25 94 D0 50 98 03 81 AD > > A2 C0 00 50 D7 59 29 F4 > > BC EF 33 C8 F3 C5 50 11 > > Vers : 4 > > Hlen : 4 <----- should be 5 > > TOS : 0 > > Lgt : 40 > > ident: 40314 > > flags: 2 > > offs : 1 <---- should be 0 > > TTL : 43 > > Prot : 6 > > Src : 208.80.152.3 > > Dst : 129.173.162.192 > > Console output ------------------------------- > > > > > > > > Code snipet ------------------------------ > > Ip4 ipHd = packet.getHeader(Ip4.class); > > Tcp tcpHd = packet.getHeader(Tcp.class); > > System.out.println("PACKET DUMP::"); > > for (int i = 0; i < 6; i++) { > > for (int k = i * 8; k < ((i > + 1) * 8); > > k++) { > > System.out.printf("%02X ", > > packet.getBuffer().getBackingBuffer().get(k) & 0xFF); > > } > > System.out.println(); > > } > > System.out.printf("Vers : %d\n", > ipHd.ver()); > > System.out.printf("Hlen : %d\n", > ipHd.hlen()); > > System.out.printf("TOS : %d\n", > ipHd.tos()); > > System.out.printf("Lgt : %d\n", > ipHd.length()); > > System.out.printf("ident: %d\n", > > ipHd.id()&0xFFFF); > > System.out.printf("flags: %d\n", > ipHd.flags()); > > System.out.printf("offs : %d\n", > ipHd.offset()); > > System.out.printf("TTL : %d\n", > ipHd.ttl()); > > System.out.printf("Prot : %d\n", > > ipHd.protocol()); > > System.out.printf("Src : %s\n", > ipHd.source()); > > System.out.printf("Dst : %s\n", > > ipHd.destination()); > > -------------------------------------------- > > > > > -------------------------------------------------------------- > ----------- > > This SF.Net email is sponsored by the Moblin Your Move > Developer's challenge > > Build the coolest Linux based applications with Moblin SDK > & win great prizes > > Grand prize is a trip for two to an Open Source event > anywhere in the world > > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > > _______________________________________________ > > Jnetstream-users mailing list > > Jne...@li... > > https://lists.sourceforge.net/lists/listinfo/jnetstream-users > > > > > -------------------------------------------------------------- > ----------- > This SF.Net email is sponsored by the Moblin Your Move > Developer's challenge > Build the coolest Linux based applications with Moblin SDK & > win great prizes > Grand prize is a trip for two to an Open Source event > anywhere in the world > http://moblin-contest.org/redirect.php?banner_id=100&url=/ > _______________________________________________ > Jnetstream-users mailing list > Jne...@li... > https://lists.sourceforge.net/lists/listinfo/jnetstream-users |