Код вывода массива байт:
static private char hex[] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' }; static private String bts(byte value) // Byte to string { return "" + hex[(value >> 4) & 0x0F] + hex[value & 0x0F]; } static private void log(byte data[]) { int lineNumber = 0; int position = 0; int length = data.length; while (position <= length) { System.out.print("0x" + bts((byte) ((position >> 8) & 0xff)) + bts((byte) (position & 0xff)) + " "); int last = 0; for (int i = 0; i < 16 && position + i < length; i++) { System.out.print(bts(data[position + i]) + " "); if (i == 7) System.out.print(" "); last = i; } last = 16 - last; if (last < 7) System.out.print(" "); while (last-- > 1) System.out.print(" "); System.out.print(" "); for (int i = 0; i < 16 && position + i < length; i++) { int symbol = data[position + i]; if (symbol < 0x20 || symbol > 0x7e) symbol = '.'; System.out.print((char)symbol); } System.out.print("\n"); lineNumber++; position = (short) (lineNumber * 16); } } static public void dumpBuf(byte buf[], boolean toServer) { System.out.println("***** Starting dump *****"); if (toServer) System.out.println("Client -> Server"); else System.out.println("Server -> Client"); log(buf); System.out.println("\n***** End dump *****"); }
Код получения данных из сети, in - InputStream сокета s
while (true) { if (s != null && s.isConnected() && in.available() >= 6) { byte firstBytes[] = new byte[6]; ArrayList<Byte> data = new ArrayList<Byte>(); int c; int count = 0; while ((c = in.read()) != -1 && count < 6) { data.add(new Byte((byte) c)); count++; } data.add(new Byte((byte) c)); if (data.get(0).byteValue() != 0x2a) { System.out.println("CRITICAL: First byte is not 0x2a!!!"); JICQLog.dumpBuf(JICQConvertions.getBytesFromArrayList(data), false); byte d[] = new byte[in.available()]; in.read(d); JICQLog.dumpBuf(d, false); continue; } byte simpleData[] = JICQConvertions.getBytesFromArrayList(data); short length = (short) (simpleData[4]*256 + simpleData[5]); int bytesRecieved = 0; for (int i = 0; i < length - 1; i++) { c = in.read(); data.add(new Byte((byte) c)); bytesRecieved++; } byte result[] = JICQConvertions.getBytesFromArrayList(data); if (bytesRecieved != length - 1) { System.out.println("Data are not full!!!"); JICQLog.dumpBuf(result, false); continue; } if (delegate != null) delegate.processFrame(new JICQFrame(result), this); } this.sleep(100); }
Сниффером смотрю отправленные сервером мне данные
64.12.200.89:5190(aol) -> 192.168.51.62:65218(unknown) TTL: 101 Window: 16384 Version: 4 Lenght: 346 FLAGS: ---PA-- SEQ: 1413957463 - ACK: 1695923615 Packet Number: 8 ---[ TCP Hex-Ascii Data ]-------------------------------------------- 0x0000 2a04 18ff 012c 00ff 0001 0000 0100 0934 *....,.........4 0x0010 3937 3639 3738 3332 0005 0012 3230 352e 97697832....205. 0x0020 3138 382e 382e 3232 363a 3531 3930 0006 188.8.226:5190.. 0x0030 0100 2b0b ffff 2040 ffff ffff 0cff ffff [email protected]{.....% 0x0040 1842 ffff 0a4f ffff ffff 041b ffff 1968 .B.o.O...B...5.h 0x0050 50ff 094f 3301 ffff 7438 ffff ffff ffff P..O3...t8...... 0x0060 ffff ffff 6f40 ffff 446a 5d2c ffff 2c61 [email protected]],..,a 0x0070 43ff ffff 69ff ffff 3544 7eff 473c ffff C...i...5D~.G<.K 0x0080 ffff ffff 2e5b 4fff 15ff ffff 33ff ffff ...~.[O.....3... 0x0090 ffff ffff 51ff ffff 69ff 55ff ffff ffff .!..Q...i.U..".# 0x00a0 00ff ffff 5e55 58ff ffff ffff ffff 4fff ....^UX.......O. 0x00b0 5179 3c0b ffff 0d01 42ff ffff 3665 ffff Qy<.....B...6e.N 0x00c0 5376 ffff ffff ffff 7376 19ff 14ff 26ff Sv.....asv....&. 0x00d0 ffff 2cff 5aff 1854 ffff ffff ffff ffff ..,.Z..T.....f.u 0x00e0 4b5c ffff ffff 640e 56ff 21ff ffff 5d7a K\.R..d.V.!..*]z 0x00f0 65ff ffff ffff ffff ffff ffff 7cff 61ff e..F.....[..|.a. 0x0100 43ff ffff ffff ffff ffff 5946 47ff 12ff C......6..YFG... 0x0110 7851 ffff ffff ffff ffff ffff ffff ffff [email protected]^.t 0x0120 3d42 ffff 4834 ffff ffff 07ff 51ff 3bff =B..H4...G..Q.;. 0x0130 ffff ..
Что получил я:
Server -> Client 0x0000 2a 04 18 c4 01 2c 00 8e 00 01 00 00 01 00 09 34 *....,.........4 0x0010 39 37 36 39 37 38 33 32 00 05 00 12 32 30 35 2e 97697832....205. 0x0020 31 38 38 2e 38 2e 32 32 36 3a 35 31 39 30 00 06 188.8.226:5190.. 0x0030 01 00 2b 0b 95 d9 20 40 e6 7b ab 83 0c d7 ce 25 ..+... @.{.....% 0x0040 18 42 d1 6f 0a 4f b1 1d 87 42 04 1b db 35 19 68 .B.o.O...B...5.h 0x0050 50 86 09 4f 33 01 d8 0a 74 38 d7 aa 96 d4 ce ed P..O3...t8...... 0x0060 c3 1c f8 d7 6f 40 9f 0f 44 6a 5d 2c dd de 2c 61 [email protected]],..,a 0x0070 43 d9 ec 98 69 c6 8c b2 35 44 7e cb 47 3c cb 4b C...i...5D~.G<.K 0x0080 9e 9d 86 7e 2e 5b 4f e1 15 98 b3 e6 33 95 e3 8e ...~.[O.....3... 0x0090 cc 21 b7 94 51 cb cb db 69 c6 55 fe 86 22 bc 23 .!..Q...i.U..".# 0x00a0 00 93 c5 97 5e 55 58 86 c2 03 c2 02 da bd 4f f5 ....^UX.......O. 0x00b0 51 79 3c 0b 91 c2 0d 01 42 a4 ed f1 36 65 87 4e Qy<.....B...6e.N 0x00c0 53 76 b9 03 c9 20 c1 61 73 76 19 b7 14 a4 26 ad Sv... .asv....&. 0x00d0 95 c6 2c a2 5a f9 18 54 98 05 b7 cd bc 66 df 75 ..,.Z..T.....f.u 0x00e0 4b 5c b1 52 da dc 64 0e 56 db 21 c4 ec 2a 5d 7a K\.R..d.V.!..*]z 0x00f0 65 fc d6 46 a3 fe 95 b2 cc 5b fa f4 7c 97 61 e1 e..F.....[..|.a. 0x0100 43 c6 b0 c9 de e7 a0 36 d6 eb 59 46 47 97 12 84 C......6..YFG... 0x0110 78 51 e1 8a 9c 1c 8b 09 98 6e 8a 40 d9 5e a2 74 [email protected]^.t 0x0120 3d 42 f0 14 48 34 e0 a7 bf 47 07 86 51 c9 3b bc =B..H4...G..Q.;. 0x0130 8c bf
Но самое интересное, что когда я из программы отправляю полученные мною странные значения, сниффер пишет что они 255 =)
Пакет который я отправляю:
Client -> Server 0x0000 2a 01 00 02 01 08 00 00 00 01 00 06 01 00 2b 0b *.............+. 0x0010 95 d9 20 40 e6 7b ab 83 0c d7 ce 25 18 42 d1 6f .. @.{.....%.B.o 0x0020 0a 4f b1 1d 87 42 04 1b db 35 19 68 50 86 09 4f .O...B...5.hP..O 0x0030 33 01 d8 0a 74 38 d7 aa 96 d4 ce ed c3 1c f8 d7 3...t8.......... 0x0040 6f 40 9f 0f 44 6a 5d 2c dd de 2c 61 43 d9 ec 98 [email protected]],..,aC... 0x0050 69 c6 8c b2 35 44 7e cb 47 3c cb 4b 9e 9d 86 7e i...5D~.G<.K...~ 0x0060 2e 5b 4f e1 15 98 b3 e6 33 95 e3 8e cc 21 b7 94 .[O.....3....!.. 0x0070 51 cb cb db 69 c6 55 fe 86 22 bc 23 00 93 c5 97 Q...i.U..".#.... 0x0080 5e 55 58 86 c2 03 c2 02 da bd 4f f5 51 79 3c 0b ^UX.......O.Qy<. 0x0090 91 c2 0d 01 42 a4 ed f1 36 65 87 4e 53 76 b9 03 ....B...6e.NSv.. 0x00a0 c9 20 c1 61 73 76 19 b7 14 a4 26 ad 95 c6 2c a2 . .asv....&...,. 0x00b0 5a f9 18 54 98 05 b7 cd bc 66 df 75 4b 5c b1 52 Z..T.....f.uK\.R 0x00c0 da dc 64 0e 56 db 21 c4 ec 2a 5d 7a 65 fc d6 46 ..d.V.!..*]ze..F 0x00d0 a3 fe 95 b2 cc 5b fa f4 7c 97 61 e1 43 c6 b0 c9 .....[..|.a.C... 0x00e0 de e7 a0 36 d6 eb 59 46 47 97 12 84 78 51 e1 8a ...6..YFG...xQ.. 0x00f0 9c 1c 8b 09 98 6e 8a 40 d9 5e a2 74 3d 42 f0 14 [email protected]^.t=B.. 0x0100 48 34 e0 a7 bf 47 07 86 51 c9 3b bc 8c bf H4...G..Q.;...
Сниффер показывает:
192.168.51.62:59261(unknown) -> 205.188.8.226:5190(aol) TTL: 64 Window: 65535 Version: 4 Lenght: 310 FLAGS: ---PA-- SEQ: 3806766289 - ACK: 684442181 Packet Number: 18 ---[ TCP Hex-Ascii Data ]-------------------------------------------- 0x0000 2a01 0002 0108 0000 0001 0006 0100 2b0b *.............+. 0x0010 ffff 2040 ffff ffff 0cff ffff 1842 ffff [email protected]{.....%.B.o 0x0020 0a4f ffff ffff 041b ffff 1968 50ff 094f .O...B...5.hP..O 0x0030 3301 ffff 7438 ffff ffff ffff ffff ffff 3...t8.......... 0x0040 6f40 ffff 446a 5d2c ffff 2c61 43ff ffff [email protected]],..,aC... 0x0050 69ff ffff 3544 7eff 473c ffff ffff ffff i...5D~.G<.K...~ 0x0060 2e5b 4fff 15ff ffff 33ff ffff ffff ffff .[O.....3....!.. 0x0070 51ff ffff 69ff 55ff ffff ffff 00ff ffff Q...i.U..".#.... 0x0080 5e55 58ff ffff ffff ffff 4fff 5179 3c0b ^UX.......O.Qy<. 0x0090 ffff 0d01 42ff ffff 3665 ffff 5376 ffff ....B...6e.NSv.. 0x00a0 ffff ffff 7376 19ff 14ff 26ff ffff 2cff ...asv....&...,. 0x00b0 5aff 1854 ffff ffff ffff ffff 4b5c ffff Z..T.....f.uK\.R 0x00c0 ffff 640e 56ff 21ff ffff 5d7a 65ff ffff ..d.V.!..*]ze..F 0x00d0 ffff ffff ffff ffff 7cff 61ff 43ff ffff .....[..|.a.C... 0x00e0 ffff ffff ffff 5946 47ff 12ff 7851 ffff ...6..YFG...xQ.. 0x00f0 ffff ffff ffff ffff ffff ffff 3d42 ffff [email protected]^.t=B.. 0x0100 4834 ffff ffff 07ff 51ff 3bff ffff H4...G..Q.;...
Как узнать из прогаммы, что получено значение 255? Так то это не очень мешает, пока в поле длинна не оказывается это значение, в этом случае вычисляется неправильно.