ahojte,
riesil uz niekto parsovanie dns packetu? Chcem to spravit v cecku, ale neviem prist na to, ako rozparsovat query a ako vlozit veci do odpovede. vie mi niekto poradit?
dakujem
Ahoj,
budeš to dělat na WIN nebo Linux? Doporučil bych Linux. Umíš v C zacházet se socketama? Budeš muset otevřít UDP a TCP na portu 53 (nevím jestli budeš koukat na i na hlavičku toho packetu, pokud ano, musíš ho otevřít jako RAW, ten socket) no a potom se musíš kouknout na strukturu DNS protokolu. Pro začátek klidně použij program Wireshark ať vidíš ty DNS dotazy, velmi silnej nástroj na to co budeš dělat je pcap, ten je napsanej v C(mimo jiné) a můžeš ho používat jako knihovnu k zachytávání packetů - http://www.tcpdump.org/sniffex.c
Předpokládám že budeš chtít fungovat jako DNS server (proxy) a budeš ty dotazy někam přeposílat a odpovědi vracet zpátky uživatelům??
#2 TheOndrap
budem to robit na Linuxe, sockety by nemali byt problem, viem, ze na porte 53. Bude to fungovat iba ako DNS server, teda v mysql budu ulozene data, ktore vyselectuje a vrati mu odpoved. Pokial nema dany zaznam, nech nevracia nic. Klasicky mam nabindovany socket na UDP porte 53, kde do "msg" by sa mali ulozit data danej DNS query. Mojim problemom je rozparsovat ich odtial, a zase poskladat packet, kde vlozim ANSWER (napr. IP adresu pre A zaznam), CLASS, TTL a pod. pozadovane veci.
recvfrom(sd, msg, MSG_SIZE, flags,(struct sockaddr *) &addr, &len);
najdes popis protokolu a vyuzijes spousty kopirovani po bajtech a podobne.. nejdulezitejsi je asi zjistit, v jakem formatu jsou tam ulozeny cisla (ale obvykle big endian - takze zneuzit ruzny ntoh/ntohl alias "network to host" pripadne s long) a tak dale... neni to nic slozityho...
poskladat odpoved je prakticky to samy jen opacne..
#5 matusso
jen bacha na zarovnavani ... kazdej kompilator se musi dukladne overit, jestli jsou ty polozky na spravnejch offsetech... pripadne pouzit nejaky pragma pack a podobne... je to vcelku nebezpecne - kazdej kompilator, kazda verze, kazda architektura to muze mit defaultne uplne jinak...
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku