Tak já nevím, ale opravdu to má být UDP? Protože všechno nasvědčuje spíš tomu, že je to TCP. V UDP žádné SYN, ACK a pod. nejsou.
David Jakub Vojáček píše v Út 21. 02. 2012 v 20:55 +0100: > Dobrý den, > > v zadání je uvedeno, že indikátor spojení a sekvenční číslo je v > reprezentaci network byte order (big endian) - znamená to tedy, že ten > zbytek mám reprezentovat v little endian? > > data jsem zkoušel balit s paddingem i bez paddingu, ani jednou server > neodpověděl, takže to asi nehraje roli (i když jako korektní řešení se > mi zdá použít tu verz bez paddingu). Pomocí wiresharku jsem > vysniffoval ten packet a má obsah > > f8 d1 11 a2 4f 2c 48 5d 60 85 3e d8 08 00 45 00 > 00 26 0c 13 00 00 80 11 f1 d4 c0 a8 00 69 93 20 > e8 ad e7 a7 0f a0 00 12 ca 71 00 00 00 00 00 00 > 00 00 01 31 > > Ale ty data jsou nějak zakódována a popravdě se v nich moc nevyznám. > Referenční řešení, které by fungovalo a jehož pakety bych mohl > vysniffovat bohužel nemám. > > Přístup k serveru mám, ale pouze vzdálený (beží na > 147.32.232.173:4000), ale protože tahle úloha je udělána tak, aby se > programovala v C nebo v Jave, tak žádné testovací rozhraní, které by > mi řeklo, co je špatně neexistuje (Python jsem si mohl zvolit, ovšem > bylo mi řečeno, že musím počítat s "nulovou" podporou ze strany školy. > Mám tedy pouze k dispozici refernční výstup programu, kde se klient > připojuje k serveru: > > 232 00000000 SEND 127.0.0.1:4000 seq=0 ack=0 flags=01 data(1): 01 > = zpráva zaslaná klientem > 311 8CB60002 RECV 127.0.0.1:4000 seq=768 ack=0 flags=00 data(256): d0 > 93 9a 0e 35 da 0b 9e … 08 0a e0 08 4c 33 37 c9 = odpověd zaslaná > serverem (tu právě nedostávám) > > Bohužel celé to zadání je trochu zmatené. Je řečeno, že příznak má být > první zprávy nastaven na SYN a je tam tabulka: > číslo > bitu > 7 > 6 > 5 > 4 > 3 > 2 > 1 > 0 > příznak > - > - > - > - > - > RST > FIN > SYN > A nyní mi tedy není úplně jasné, jestli příznaku syn odpovída číslo > 000000001 = 1 > > Vypadá to, že asi nakonec budu nucen použít některý z podporovaných > jazyků. > > Děkuji za Vaše názory > > Jakub > > > Dne 21.2.2012 19:52, Petr Messner napsal(a): > > Ahoj, > > > > 21. 2. 2012 v 19:19, Jakub Vojáček: > > ... > > > Pokud bych neměl definován tvar paketu, tak bych použil > > > > > > s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM ) > > > s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) > > > s.sendto(data, host, port)) > > > > > > , ale jelikož je přesně definována velikost a struktura paketu, tak tento > > > způsob nemohu použít. > > Nerozumím tomu, proč tento způsob nemůžeš použít. Jediné, co potřebuješ > > upravit, jsou data. Jak ten paket chceš potom odeslat, když ne takto? > > > > > Formát je definován následovně: > > > - 4B jsou rezervovány na identifikátor spojení > > > - 2B jsou rezervovány na sekvenční číslo > > > - 2B jsou rezervovány na číslo potvrzení > > > - 1B je rezervován na příznak > > > - 0-256B je rezervováno na data > > > > > > Abych řekl pravdu, vůbec jsem nevěděl, jak začít. Nakonec jsem se pokusil > > > použít modul struct a přenáše data zabalena pomoci toho modulu. > > > > > > Použil jsem tedy funkci struct.pack() > > > > > > data = struct.pack("!IHHB256s", 0, 0, 0, 1, "1") > > > s.sendto(data, (host, port)) > > > > > Možná je chyba zde. Jako data posíláš "1", ale zabališ to jako "1" a za tím > > 255 znaků 0x00. To možná takto být nemá, záleží na zadání. > > > > Také pozor na endianitu. Vykřičníkem nastavuješ network/big-endian byte > > order, což by mělo být správně, ale je možné, že server je naprogramovaný > > špatně :) > > > > > Jenomže tento způsob také nefunguje, protože pokud pošlu takto zabalenou > > > zprávu referenčnímu serveru, tak nedostanu odpověď - tudíž server > > > nepřečetl paket správně. > > Zkus se třeba tcpdumpem nebo wiresharkem (zmiňovaném v dalším mailu) > > podívat, co přesně lítá po síti. Není možné nějak z toho serveru zjistit, > > co je špatně? Máš ten server nějak k dispozici? > > > > > Prosím Vás tedy o nějaký nápad, jak dál postupovat a jestli je např. > > > použití modulu struct vhodné. > > > > > Modul struct je vhodný přesně na toto. > > > > PM > > > > > Děkuji za každou radu > > > > > > Jakub > > > > > > _______________________________________________ > > Python mailing list > > Python@py.cz > > http://www.py.cz/mailman/listinfo/python > > > _______________________________________________ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python