<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <meta content="text/html; charset=ISO-8859-2"
      http-equiv="Content-Type">
  </head>
  <body text="#000099" bgcolor="#ffffff">
    <font face="Calibri">Dobrý den,<br>
      <br>
      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?<br>
      <br>
      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<br>
      <br>
      <font face="Courier New">f8 d1 11 a2 4f 2c 48 5d  60 85 3e d8 08
        00 45 00  <br>
        00 26 0c 13 00 00 80 11  f1 d4 c0 a8 00 69 93 20   <br>
        e8 ad e7 a7 0f a0 00 12  ca 71 00 00 00 00 00 00   <br>
        00 00 01 31   </font><br>
    </font><br>
    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. <br>
    <br>
    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:<br>
    <br>
    <span style="color: rgb(0, 0, 0); font-family: monospace; font-size:
      12px; font-style: normal; font-variant: normal; font-weight:
      normal; letter-spacing: normal; line-height: normal; orphans: 2;
      text-align: justify; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255); display: inline ! important;
      float: none;">232 00000000<span class="Apple-converted-space"> </span></span><strong
      style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);
      font-family: monospace; font-size: 12px; font-style: normal;
      font-variant: normal; letter-spacing: normal; line-height: normal;
      orphans: 2; text-align: justify; text-indent: 0px; text-transform:
      none; white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255);">SEND<span
        class="Apple-converted-space"> </span></strong><span
      style="color: rgb(0, 0, 0); font-family: monospace; font-size:
      12px; font-style: normal; font-variant: normal; font-weight:
      normal; letter-spacing: normal; line-height: normal; orphans: 2;
      text-align: justify; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255); display: inline ! important;
      float: none;">127.0.0.1:4000 seq=0 ack=0 flags=01 data(1): 01</span>                                       
    = zpráva zaslaná klientem<br style="padding: 0px; margin: 0px;
      color: rgb(0, 0, 0); font-family: monospace; font-size: 12px;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: normal; orphans: 2;
      text-align: justify; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255);">
    <span style="color: rgb(0, 0, 0); font-family: monospace; font-size:
      12px; font-style: normal; font-variant: normal; font-weight:
      normal; letter-spacing: normal; line-height: normal; orphans: 2;
      text-align: justify; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255); display: inline ! important;
      float: none;">311 8CB60002<span class="Apple-converted-space"> </span></span><strong
      style="padding: 0px; margin: 0px; color: rgb(0, 0, 0);
      font-family: monospace; font-size: 12px; font-style: normal;
      font-variant: normal; letter-spacing: normal; line-height: normal;
      orphans: 2; text-align: justify; text-indent: 0px; text-transform:
      none; white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255);">RECV<span
        class="Apple-converted-space"> </span></strong><span
      style="color: rgb(0, 0, 0); font-family: monospace; font-size:
      12px; font-style: normal; font-variant: normal; font-weight:
      normal; letter-spacing: normal; line-height: normal; orphans: 2;
      text-align: justify; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 2; word-spacing: 0px;
      background-color: rgb(255, 255, 255); display: inline ! important;
      float: none;">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</span>   =  
    odpověd zaslaná serverem (tu právě nedostávám)<br>
    <br>
    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:<br>
    <table class="inline" style="padding: 0px; margin: 0px 0px 1em;
      font-size: 13px; background-color: rgb(255, 255, 255);
      border-collapse: collapse; color: rgb(0, 0, 0); font-family:
      'Lucida Grande',Verdana,Lucida,Helvetica,Arial,sans-serif;
      font-style: normal; font-variant: normal; font-weight: normal;
      letter-spacing: normal; line-height: normal; orphans: 2;
      text-align: justify; text-indent: 0px; text-transform: none;
      white-space: normal; widows: 2; word-spacing: 0px;" width="249"
      height="47">
      <tbody style="padding: 0px; margin: 0px;">
        <tr class="row0" style="padding: 0px; margin: 0px;">
          <th class="col0" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187); background-color: rgb(184, 202,
            232);">číslo bitu</th>
          <th class="col1" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187); background-color: rgb(184, 202,
            232);">7</th>
          <th class="col2" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187); background-color: rgb(184, 202,
            232);">6</th>
          <th class="col3" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187); background-color: rgb(184, 202,
            232);">5</th>
          <th class="col4" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187); background-color: rgb(184, 202,
            232);">4</th>
          <th class="col5" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187); background-color: rgb(184, 202,
            232);">3</th>
          <th class="col6 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);
            background-color: rgb(184, 202, 232);">2</th>
          <th class="col7 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);
            background-color: rgb(184, 202, 232);">1</th>
          <th class="col8 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);
            background-color: rgb(184, 202, 232);">0</th>
        </tr>
        <tr class="row1" style="padding: 0px; margin: 0px;">
          <td class="col0" style="padding: 3px; margin: 0px; border: 1px
            solid rgb(140, 172, 187);">příznak</td>
          <td class="col1 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">-</td>
          <td class="col2 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">-</td>
          <td class="col3 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">-</td>
          <td class="col4 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">-</td>
          <td class="col5 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">-</td>
          <td class="col6 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">RST</td>
          <td class="col7 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">FIN</td>
          <td class="col8 centeralign" style="padding: 3px; margin: 0px;
            text-align: center; border: 1px solid rgb(140, 172, 187);">SYN</td>
        </tr>
      </tbody>
    </table>
    A nyní mi tedy není  úplně jasné, jestli příznaku syn odpovída číslo
    000000001 = 1<br>
    <br>
    Vypadá to, že asi nakonec budu nucen použít některý z podporovaných
    jazyků.<br>
    <br>
    Děkuji za Vaše názory<br>
    <br>
    Jakub<br>
    <br>
    <br>
    Dne 21.2.2012 19:52, Petr Messner napsal(a):
    <blockquote
      cite="mid:9DFB6F75-D82C-4FB0-989F-6052D68EEC43@gmail.com"
      type="cite">
      <pre wrap="">Ahoj,

21. 2. 2012 v 19:19, Jakub Vojáček:
...
</pre>
      <blockquote type="cite">
        <pre wrap="">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. 
</pre>
      </blockquote>
      <pre wrap="">
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?

</pre>
      <blockquote type="cite">
        <pre wrap="">
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))

</pre>
      </blockquote>
      <pre wrap="">
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ě :)

</pre>
      <blockquote type="cite">
        <pre wrap="">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ě.
</pre>
      </blockquote>
      <pre wrap="">
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?

</pre>
      <blockquote type="cite">
        <pre wrap="">
Prosím Vás tedy o nějaký nápad, jak dál postupovat a jestli je např. použití modulu struct vhodné.

</pre>
      </blockquote>
      <pre wrap="">
Modul struct je vhodný přesně na toto.

PM

</pre>
      <blockquote type="cite">
        <pre wrap="">Děkuji za každou radu

Jakub
</pre>
      </blockquote>
      <pre wrap="">


_______________________________________________
Python mailing list
<a class="moz-txt-link-abbreviated" href="mailto:Python@py.cz">Python@py.cz</a>
<a class="moz-txt-link-freetext" href="http://www.py.cz/mailman/listinfo/python">http://www.py.cz/mailman/listinfo/python</a>

</pre>
    </blockquote>
  </body>
</html>