Nameserver hex response naar "leesbaar maken"

Status
Niet open voor verdere reacties.

gertjuhhh1993

Gebruiker
Lid geworden
21 jun 2010
Berichten
127
Goedemorgen,

Ik krijg in hex iets terug van de nameserver.
Code:
\x01\x01\x85\x00\x00\x01\x00\x0e\x00\x00\x00\x00\x06\x67\x6f\x6f\x67\x6c\x65\x02\x6e\x6c\x00\x00\xff\x00\x01\xc0\x0c\x00\x01\x00\x01\x00\x00\x01\x2c\x00\x04\xad\xc2\x20\x77\xc0\x0c\x00\x01\x00\x01\x00\x00\x01\x2c\x00\x04\xad\xc2\x20\x7f\xc0\x0c\x00\x01\x00\x01\x00\x00\x01\x2c\x00\x04\xad\xc2\x20\x78\xc0\x0c\x00\x02\x00\x01\x00\x05\x46\x00\x00\x10\x03\x6e\x73\x33\x06\x67\x6f\x6f\x67\x6c\x65\x03\x63\x6f\x6d\x00\xc0\x0c\x00\x10\x00\x01\x00\x00\x01\x2c\x00\x0c\x0b\x76\x3d\x73\x70\x66\x31\x20\x2d\x61\x6c\x6c\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02\x58\x00\x0c\x00\x0a\x05\x61\x73\x70\x6d\x78\x01\x6c\xc0\x5b\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02\x58\x00\x09\x00\x1e\x04\x61\x6c\x74\x32\xc0\x8d\xc0\x0c\x00\x06\x00\x01\x00\x00\x00\x3c\x00\x22\xc0\x57\x09\x64\x6e\x73\x2d\x61\x64\x6d\x69\x6e\xc0\x5b\x00\x16\xf7\x0a\x00\x00\x03\x84\x00\x00\x03\x84\x00\x00\x07\x08\x00\x00\x00\x3c\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02\x58\x00\x09\x00\x32\x04\x61\x6c\x74\x34\xc0\x8d\xc0\x0c\x00\x02\x00\x01\x00\x05\x46\x00\x00\x06\x03\x6e\x73\x32\xc0\x5b\xc0\x0c\x00\x02\x00\x01\x00\x05\x46\x00\x00\x06\x03\x6e\x73\x34\xc0\x5b\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02\x58\x00\x09\x00\x28\x04\x61\x6c\x74\x33\xc0\x8d\xc0\x0c\x00\x02\x00\x01\x00\x05\x46\x00\x00\x06\x03\x6e\x73\x31\xc0\x5b\xc0\x0c\x00\x0f\x00\x01\x00\x00\x02\x58\x00\x09\x00\x14\x04\x61\x6c\x74\x31\xc0\x8d

als ik dit echo word het automatisch omgezet naar leesbare tekens, maar omdat niet alle tekens herkent worden word het alsnog onleesbaar:
…googlenlÿÀ ,*Â wÀ ,*Â À ,*Â xÀ Fns3googlecomÀ , v=spf1 -allÀ X aspmxlÀ[À X alt2ÀÀ <"ÀW dns-adminÀ[÷ „„<À X 2alt4ÀÀ Fns2À[À Fns4À[À X (alt3ÀÀ Fns1À[À X alt1À
probeer de bovenstaande regel maar eens in je text editor te plakken. dan zie je dat er nog van alles bij komt.

hoe kan ik dit uit elkaar halen en het leesbaar maken zoals in wireshark?
google_wireshark.PNG
 
Wil je alleen de text filteren? of ook de betekenis eruit halen?

Het is namelijk een bericht dat gecodeerd is en toevallig textelementen bevat.

dit stuk bijvoorbeeld:

x0e\x00\x00\x00\x00\x06\x67\x6f\x6f\x67\x6c\x65\x02\x6e\x6c

0e: 14 tekens in de domainnaam
00: geen tekens in dit deel van het domain
00: geen tekens in dit deel van het domain
00: geen tekens in dit deel van het domain
00: geen tekens in dit deel van het domain
06: 6 tekens in dit deel van het domain: 67 6f 6f 67 6c 65 : g o o g l e
02: 2 tekens in dit deel van het domain: 6e 6c : n l

Deze codering geeft dus de te verwachten bytes om te lezen in de hele domeinnaam en de te lezen bytes per onderdeel. Dit zodat de software eenvoudig weet hoeveel te lezen en te interpreteren.
 
hey wampier,

die 14 klopt niet helemaal dat geeft aan hoeveel antwoorden er zijn

transaction_id = \x01\x01
flags = \x85\x00
questions = \x00\x01 = 1 vraag
answers rrs = \x00\x0e = 14 antwoorden
authority rrs = \x00\x00
additional rrs = \x00\x00

hierna krijg je eerst de query en dan pas de antwoorden. de antwoorden beginnen allemaal met \xc0\x0c , maar dat gaat voor de additional rrs weer niet op dus daar kan ik niet op filteren.
zie plaatje:)
google_wireshark.PNG
 
Laatst bewerkt:
Ah my mistake, maar dat doet niets af aan de codering. De tussenliggende cijfers zijn dus pointers naar de lengte van elk onderdeel. je weet dus hoe lang elk veld is. Je hoeft dus niet te kijken naar de inhoud, gewoon "X" plaatsen reserveren en inlezen.

de 0C is de lengte van het header field (12 tekens). ik neem aan dat C0 (192) de lengte is van een response. Als je de hele response post in een filetje dan kan ik daar wel eens doorheen lopen, maar zo zou het moeten werken.

Lengte hele blok - lengte subblock - data subblock - lengte subblock2 - data subblock2.

Er is vast ook een spec die dit vastlegt
 
opbouw eerste deel (volgens voorbeeld):

Name [C0 0C] (offset to position 12 of the DNS message)
Type [00 05]
Class [00 01]
TTL [00 00 00 3C]
RDLENGTH [00 19]

Dit is je eerste entry in je file
c0 0c 00 01 00 01 00 00 01 2c 00 04 ad c2 20 77

C0 0C : name record, 12de byte uit de question
00 01 : type 1 (host adres "A"-record)
00 01 : class 1 (internet)
00 00 01 2c : Time to live : x012c = 300 seconden = 5 minuten
00 04 : datalengte 4 (ipadres)
AD C2 20 77 : 173 194 32 119
 
Laatst bewerkt:
weet je ook waar de C0 precies voor staat? voor de rest is mijn vraag redelijk beantwoord:) alleen nog even kijken hoe ik het precies ga echo-en etc.
 
het is een relatieve verwijzing. Om aan te geven dat het een relatieve verwijzing is worden de eerste 2 bits gezet. Je verwijzing kan dus maximaal 14 bits zijn: 2 bytes met de hoogste 2 bits gereserveerd. C0 01 is de verwijzing naar offset 1. Het hoeft dus overigens niet altijd C0 te zijn. C1,c2,c3,c4,cf etc. In de praktijk zal dit redelijk zeldzaam zijn tenzij je een heel ingewikkelde lange query draait.


zie:

http://www.netfor2.com/rfc1035.txt

sectie 4.1.4
 
kijk aan. ik snap het nu helemaal(denk ik).
Vraag opgelost

Bedankt voor uw hulp:thumb:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan