Avatar billede dsj Nybegynder
04. september 2003 - 01:08 Der er 22 kommentarer og
2 løsninger

Hjælp til at forstå ICQ-protokol

Jeg skal i sidste ende have lavet noget java-kode, der kan kommunikere med ICQ-serverne, men jeg har ¤"#¤¤/!(¤%&#" meget besvær med at forstå protokollen. Jeg har fundet en side, der beskriver protokollen ganske grundigt: http://iserverd1.khstu.ru/oscar/

Lad os tage udgangspunkt i [Login]:
1. Der connectes til en ICQ-server, hvis formål er at redirecte én efter autentifikation.
2. Der skal sendes en CLI_IDENT-besked - her er det så jeg står mere eller mindre af.

Spørgsmål:
-------------------------
Hvad betyder "So client should send it on FLAP channel 0x01"? Hvordan sender jeg på en FLAP-kanal?

Når jeg opbygger en besked, gør jeg det ved at bruge et byte-array. Hvordan putter jeg f.eks. "1A" ind i det, som følger?

byte[] b = new...
b[0] = 0x1A

Når der sættes "0x" foran er det hex-decimaler ikke? Hvordan virker det egentlig..?

Det her er ikke et af de letteste spørgsmål, og jeg spørger sikkert mere, hvis jeg får et svar :)
Avatar billede dsj Nybegynder
04. september 2003 - 01:14 #1
Egentlig ville jeg helst have noget kode der bare kunne gøre det, men kravet er at det hverken må indeholder I/O-kode eller trådning. Jeg har set på rigtig meget kode, men fælles for det hele er, at trådning og I/O er inkl. - jeg skal altså bruge en ren parser.
Avatar billede arne_v Ekspert
04. september 2003 - 07:24 #2
Jeg forstår ikke spørgsmål om byte array.

Bytes er 8 bit integers med range -128...127, men opfører sig ligesom
alle andre integers også med hensyn til arrays og 0x betyder hexadecimal
i.s.f. decimal men er en konstant helt ligesom andre konstanter det
er bare med 16 tals systemet i.s.f. 10 tals systemet (0-9A-F i.s.f. kun 0-9).

byte[] b = new byte[3];
b[0] = 0x0A; // gem 10
b[1] = 0x0B; // gem 11
b[2] = 0x0C; // gem 12

(0x1A er 26)
Avatar billede dsj Nybegynder
04. september 2003 - 10:37 #3
Mht. byte-arrayet, spurgte jeg bare, om det var sådan man gør, altså f.eks. b[0] = 0x1A; :)
Avatar billede dsj Nybegynder
04. september 2003 - 10:42 #4
Kan du evt. hjælpe mig lidt med CLI_IDENT-pakken http://iserverd1.khstu.ru/oscar/cli_ident.html ?

Jeg forstår ikke rigtig det format de stiller op, er det én pakke med en masse pakker?

Og hvad mener de med at passwordet skal "roastes"
Avatar billede arne_v Ekspert
04. september 2003 - 11:37 #5
Det er en måde at initialisere et byte array på.

Jeg plejer ofte at bruge DataOutputStream og ByteArrayOutputStream
til det fordi det giver betydeligt kønnere kode når man skal over
i 2 og 4 byte integers.

Kræver dog at det er big endian.
Avatar billede arne_v Ekspert
04. september 2003 - 21:17 #6
Med hensyn til roasting står det jo klart og tydeligt i teksten:

Passwords are roasted when sent to the host. This is done so they aren't sent in "clear text" over the wire, although they are still trivial to decode. Roasting is performed by first xoring each byte in the password with the equivalent modulo byte in the roasting array ( 0xF3, 0x26, 0x81, 0xC4, 0x39, 0x86, 0xDB, 0x92, 0x71, 0xA3, 0xB9, 0xE6, 0x53, 0x7A, 0x95, 0x7C )

Det må betyde:

for(int i = 0; i < pw.length; i++) {
  roastpw[i] = pw[i] ^ roast[i % 16];
}
Avatar billede arne_v Ekspert
04. september 2003 - 21:22 #7
Det er en pakke med et antal records i.

Hex dumpen forklarer vel egentlig meget godt hvad det er.

[der er en 6 byte header som ikke er forklaret på den side og
en tykr-fejl til sidst hvor der står 0F hvor der burde stå 0E]
Avatar billede arne_v Ekspert
04. september 2003 - 21:23 #8
6 byte headeeren er forklaret her:

http://iserverd1.khstu.ru/oscar/basic.html
Avatar billede dsj Nybegynder
04. september 2003 - 21:34 #9
Hvad er det lige der sker i følgende linie:

roastpw[i] = pw[i] ^ roast[i % 16];
Avatar billede arne_v Ekspert
04. september 2003 - 21:37 #10
roasted password byte i ? password byte i XOR roast array i modulus 16

XOR er helt klar udfra teksten.

Det fremgår ikke helt klart hvordan den modulus er, men det her er da den
mest logiske måde.
Avatar billede dsj Nybegynder
04. september 2003 - 21:55 #11
Klart øh - nu fatter jeg ikke lige betydning af f.eks. ^
Avatar billede arne_v Ekspert
04. september 2003 - 21:58 #12
^ er XOR operatoren

binært exclusive OR

1 XOR 1 = 0
1 XOR 0 = 1
0 XOR 1 = 1
0 XOR 0 = 0

på hver bit.
Avatar billede arne_v Ekspert
07. september 2003 - 22:24 #13
OK ?
Avatar billede dsj Nybegynder
07. september 2003 - 22:40 #14
Ja, jeg har mange ting jeg arbejder på lige i øjeblikket og kan desværre ikke få prøvet det hele af så hurtigt som jeg gerne ville.

Lige en hurtig: hvad gør | ? F.eks.  1 | 2

Jeg har stadig et problem med forstå, hvordan jeg skal bygge mit byte-array op, for at forme en CLI_IDENT-pakke - roastningen er jeg med på... Men hvordan indsætter jeg alle "sub-pakkerne" (TLV'er) i FLAP-pakken?
Avatar billede arne_v Ekspert
07. september 2003 - 22:45 #15
| er binær OR (ligesom || er logisk OR).

1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0

igen bitvist.

Derfor er 1| 2 = 3.

(00000001 | 00000010 = 00000011)
Avatar billede dsj Nybegynder
07. september 2003 - 22:47 #16
Dvs. at | og ^ har nogenlunde samme effekt, eller hvor ligger forskellen ?
Avatar billede arne_v Ekspert
07. september 2003 - 22:49 #17
Nej - der er forskel !

1 ^ 1 er 0
1 | 1 er 1
Avatar billede arne_v Ekspert
07. september 2003 - 22:49 #18
De 3 andre tilfælde er ens.
Avatar billede arne_v Ekspert
07. september 2003 - 22:56 #19
Det kan vel gøres på mange måder.

Hvis det er big endian er DataOutputStream en god løsning. Ellers må
du selv putte ind i byte arrayet (lav addByte/addShort/addInt/addLong
metoder).

Så skal der naturligvis laves nogle klasser og metoder så det ike
bliver den rene spageti.
Avatar billede dsj Nybegynder
07. september 2003 - 23:07 #20
Jeg tænkte mere på, hvis jeg selv skulle putte ind i byte-arrayet, hvordan det så skal fyldes op, altså hvad skal der placeres hvor. Jeg synes nemlig at der er noget de er angivet modstridende mellem forklaringen FLAP's 6 byte header (http://iserverd1.khstu.ru/oscar/basic.html):

2A  byte  FLAP id byte
xx  byte  FLAP channel
xx xx  word  FLAP datagram seq number
xx xx  word  FLAP data size

og CLI_IDENT (http://iserverd1.khstu.ru/oscar/cli_ident.html):

00 00 00 01 dword id number

Er det ikke headeren der beskrives begge steder?
Avatar billede arne_v Ekspert
07. september 2003 - 23:11 #21
Nej.

Der er først 6 byte header, så 4 byte ID, så TLV'erne.

Kig på hex dumpet nederst på cli_ident siden !
Avatar billede dsj Nybegynder
28. september 2003 - 13:32 #22
Hvis der er nogen det vil have point, skal der afleveres et svar...
Avatar billede arne_v Ekspert
28. september 2003 - 13:35 #23
Mængden af potentielle nogen er vist ret begrænset !

:-)

Jeg vil tillade mig at ligge et svar mine forklaringer.
Avatar billede dsj Nybegynder
28. september 2003 - 13:36 #24
Lukker. - det ka du da godt tillade dig :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester