Veľkosť IP datagramu - Little/Big endian – Sítě – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Veľkosť IP datagramu - Little/Big endian – Sítě – Fórum – Programujte.comVeľkosť IP datagramu - Little/Big endian – Sítě – Fórum – Programujte.com

 

m->29+6
Super člen
31. 10. 2010   #1
-
0
-

Bol by som rád keby mi niekto objasnil môj problém. Do školy robím projekt, ktorý vyžaduje použitie Raw soketov v C++. Cez ne posiealm IGMP pakety, ale IP hlavičku si vyplňujem sám. Kernel mi vypní len ID, zdrojovú adresu a kontrolný súčet. Pre IP hlavičku som si vytvoril štruktúru:

  /**

* Header of IPv4 datagram.
*/
struct header_t {
unsigned char version_ihl; /**< IP version | header size */
unsigned char tos; /**< type of service */
uint16_t tot_len; /**< whole size of IP packet */
uint16_t id; /**< ID of datagram if it's fragmented */
uint16_t frag_off; /**< flags and shift offset (0x4000) */
unsigned char ttl; /**< time to live */
unsigned char protocol; /**< protocol of upper layer */
uint16_t check; /**< check sum (CRC) */
in_addr_t saddr, daddr; /**< source & destination IP address */
} header;

Následne odchytávam prijaté datagramy. Problém je, že položka celkovej veľkosti IP datagramu je 16 bitová a mala by byť v NBO (Network byte order = Big Endian). Keď sa ale pokúsim vyplniť položku v IP hlavičke pomocou funkcie htons() tak mi kernel odmietne poslať datagram (funkcia sendto()). Na Ubuntu to funguje, ale vo FreeBSD nie. Samozrejme na FreeBSD zase funguje ak zadám hodnotu bez funkcie htons(). Je v tom ale zmätok, pretože ak prijmem svoje datagramy tak je položka tot_len vyplnená v little endiane, ale pakety, ktoré dostávam zo siete sú korektne v big endiane. Preto keď prijmem datagram tak si môžem len tipnúť aký veľký je paket (nemôžem sa spoľahnúť či je v Little alebo Big endiane). Mne to však v big endiane kernel zamietne zobrať. Neviete čím by to mohlo byť?

Nahlásit jako SPAM
IP: 83.208.112.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 14 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý