Beste Devvers,
misschien een wat cryptische titel, maar ik kon niet veel beters bedenken
Momenteel zit ik wat te capturen in communicatie tussen een (Apache Tomcat) webserver en een Java-applicatie.
De communicatie ziet er (versimpeld) zo uit:
Client (Java) stuurt een HTTP chunked request naar de webserver.
De webserver stuurt een HTTP chuncked request terug naar de client.
Deze pakketten zie ik ook netjes verschijnen in de log van Wireshark. Wireshark detecteert ook dat de data die overgezonden wordt gecomprimeerd is conform zlib (jzlib verzorgt dit voor Java), echter kan hij de data niet decompressen. Waarom is me onduidelijk want er wordt geen melding gegeven met de reden van het falen.
Omdat ik graag wil weten wat er in de body van de request zit, heb ik een datadump gemaakt van het geassembleerde pakket;
Deze data probeerde ik eerst middels PHP in te lezen en daarna te deflaten, echter is de uitkomst van de decompressie nagenoeg hetzelfde als het origineel.
Omdat ik PHP niet vertrouwde, heb ik daarna jzlib gedownload en een eenvoudige Java-applicatie geschreven, welke de datadump van de HTML-body inleest en deflate. Echter zijn de resultaten van deze actie hetzelfde als de uitkomst van PHP. De decompressed binary is nagenoeg hetzelfde als de compressed binary.
Ik heb JZlib (1.1.0) gedownload van http://www.jcraft.com/jzlib/ en het volgende (vereenvoudigde) voorbeeld gebruikt:
De input (in hex) is al volgt:
Ikzelf kan er geen chocolade van maken. Wie kan mij helpen?
misschien een wat cryptische titel, maar ik kon niet veel beters bedenken
Momenteel zit ik wat te capturen in communicatie tussen een (Apache Tomcat) webserver en een Java-applicatie.
De communicatie ziet er (versimpeld) zo uit:
Client (Java) stuurt een HTTP chunked request naar de webserver.
De webserver stuurt een HTTP chuncked request terug naar de client.
Deze pakketten zie ik ook netjes verschijnen in de log van Wireshark. Wireshark detecteert ook dat de data die overgezonden wordt gecomprimeerd is conform zlib (jzlib verzorgt dit voor Java), echter kan hij de data niet decompressen. Waarom is me onduidelijk want er wordt geen melding gegeven met de reden van het falen.
Omdat ik graag wil weten wat er in de body van de request zit, heb ik een datadump gemaakt van het geassembleerde pakket;
Deze data probeerde ik eerst middels PHP in te lezen en daarna te deflaten, echter is de uitkomst van de decompressie nagenoeg hetzelfde als het origineel.
Omdat ik PHP niet vertrouwde, heb ik daarna jzlib gedownload en een eenvoudige Java-applicatie geschreven, welke de datadump van de HTML-body inleest en deflate. Echter zijn de resultaten van deze actie hetzelfde als de uitkomst van PHP. De decompressed binary is nagenoeg hetzelfde als de compressed binary.
Ik heb JZlib (1.1.0) gedownload van http://www.jcraft.com/jzlib/ en het volgende (vereenvoudigde) voorbeeld gebruikt:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
| int err; int comprLen = 40000; byte[] compr = new byte[comprLen]; File in = new File("zlib.bin"); byte[] hello2 = new byte[(int) in.length()]; FileInputStream fis = new FileInputStream(in); fis.read(hello2); Deflater deflater = null; deflater = new Deflater(JZlib.Z_BEST_SPEED); deflater.setInput(hello2); deflater.setOutput(compr); while (deflater.total_in != hello2.length && deflater.total_out < comprLen) { deflater.avail_in = deflater.avail_out = 1; err = deflater.deflate(JZlib.Z_NO_FLUSH); } while (true) { deflater.avail_out = 1; err = deflater.deflate(JZlib.Z_FINISH); if (err == JZlib.Z_STREAM_END) break; } err = deflater.end(); System.out.println(new String(hello2)); System.out.println("=="); System.out.println(new String(compr)); File out = new File("zlib_dec.bin"); FileOutputStream fos = new FileOutputStream(out); fos.write(compr); |
De input (in hex) is al volgt:
*niet meer relevant*
Ikzelf kan er geen chocolade van maken. Wie kan mij helpen?
[ Voor 10% gewijzigd door Matis op 30-10-2011 21:35 ]
If money talks then I'm a mime
If time is money then I'm out of time