Część 1: DNS - Domain Name System
Dokumenty RFC:
- RFC-819 The Domain Naming Convention for Internet User Applications (1982)
- RFC-1034 DOMAIN NAMES - CONCEPTS AND FACILITIES (1987)
- RFC-1035 DOMAIN NAMES - IMPLEMENTATION and SPECIFICATION (1987)
Protokół tłumaczący nazwy na adresy IP. Port 53 UDP (przede wszystkim)
Szczegółowy opis: http://pl.wikipedia.org/wiki/DNS
Pakiet DNS dzieli się na sekcje:
- zapytania
- odpowiedzi
- zarządcy domeny
- dodatkowych informacji
Do zobrazowania działania DNS'a użyjemy program dig
Będziemy chcieli uzyskać adres serwera uczelni PJWSTK zaczynając od końca adresu (czyli od domyślnej kropki).
Pytamy o '.' (kropkę)
Zuerst:~ # dig
; <<>> DiG 9.3.2 <<>>
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53127
;; flags: qr rd ra; QUERY: 1, ANSWER: 13, AUTHORITY: 0, ADDITIONAL: 13
;; QUESTION SECTION:
;. IN NS
;; ANSWER SECTION:
. 457328 IN NS J.ROOT-SERVERS.NET.
. 457328 IN NS K.ROOT-SERVERS.NET.
. 457328 IN NS L.ROOT-SERVERS.NET.
. 457328 IN NS M.ROOT-SERVERS.NET.
. 457328 IN NS A.ROOT-SERVERS.NET.
. 457328 IN NS B.ROOT-SERVERS.NET.
. 457328 IN NS C.ROOT-SERVERS.NET.
. 457328 IN NS D.ROOT-SERVERS.NET.
. 457328 IN NS E.ROOT-SERVERS.NET.
. 457328 IN NS F.ROOT-SERVERS.NET.
. 457328 IN NS G.ROOT-SERVERS.NET.
. 457328 IN NS H.ROOT-SERVERS.NET.
. 457328 IN NS I.ROOT-SERVERS.NET.
;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET. 24527 IN A 198.41.0.4
B.ROOT-SERVERS.NET. 32998 IN A 192.228.79.201
C.ROOT-SERVERS.NET. 29309 IN A 192.33.4.12
D.ROOT-SERVERS.NET. 29308 IN A 128.8.10.90
E.ROOT-SERVERS.NET. 32997 IN A 192.203.230.10
F.ROOT-SERVERS.NET. 32997 IN A 192.5.5.241
G.ROOT-SERVERS.NET. 32997 IN A 192.112.36.4
H.ROOT-SERVERS.NET. 32997 IN A 128.63.2.53
I.ROOT-SERVERS.NET. 32998 IN A 192.36.148.17
J.ROOT-SERVERS.NET. 24527 IN A 192.58.128.30
K.ROOT-SERVERS.NET. 32998 IN A 193.0.14.129
L.ROOT-SERVERS.NET. 32998 IN A 198.32.64.12
M.ROOT-SERVERS.NET. 32998 IN A 202.12.27.33
;; Query time: 14 msec
;; SERVER: 213.241.79.37#53(213.241.79.37)
;; WHEN: Tue Apr 10 01:37:46 2007
;; MSG SIZE rcvd: 436
Odpowiedziały nam serwery główne tzw "root-serwery".
Lokalizacje serwerów głównych dns: http://en.wikipedia.org/wiki/Root_nameserver
oraz mapka (kopia z wikipedii): Root-current.svg
Wybieramy jeden z nich i pytamy się o 'pl.'
Zuerst:~ # dig -t ns pl @a.root-servers.net
; <<>> DiG 9.3.2 <<>> -t ns pl @a.root-servers.net
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 40739
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 7, ADDITIONAL: 9
;; QUESTION SECTION:
;pl. IN NS
;; AUTHORITY SECTION:
pl. 172800 IN NS B-DNS.pl.
pl. 172800 IN NS C-DNS.pl.
pl. 172800 IN NS D-DNS.pl.
pl. 172800 IN NS E-DNS.pl.
pl. 172800 IN NS F-DNS.pl.
pl. 172800 IN NS G-DNS.pl.
pl. 172800 IN NS A-DNS.pl.
;; ADDITIONAL SECTION:
A-DNS.pl. 172800 IN A 195.187.245.44
B-DNS.pl. 172800 IN A 80.50.50.10
C-DNS.pl. 172800 IN A 193.171.255.47
D-DNS.pl. 172800 IN A 213.172.174.70
E-DNS.pl. 172800 IN A 213.218.118.26
F-DNS.pl. 172800 IN A 217.17.46.189
F-DNS.pl. 172800 IN AAAA 2001:1a68:0:10::189
G-DNS.pl. 172800 IN A 149.156.1.6
G-DNS.pl. 172800 IN AAAA 2001:6d8:0:1::a:6
;; Query time: 145 msec
;; SERVER: 198.41.0.4#53(198.41.0.4)
;; WHEN: Tue Apr 10 01:40:50 2007
;; MSG SIZE rcvd: 328
Odpowiedziały nam serwery odpowiedzialne za domenę pl.
Wybieramy jeden z nich i pytamy się o 'edu.pl.'
Zuerst:~ # dig -t ns edu.pl @c-dns.pl.
; <<>> DiG 9.3.2 <<>> -t ns edu.pl @c-dns.pl.
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 43580
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 6, ADDITIONAL: 8
;; QUESTION SECTION:
;edu.pl. IN NS
;; AUTHORITY SECTION:
edu.pl. 86400 IN NS a-dns.pl.
edu.pl. 86400 IN NS b-dns.pl.
edu.pl. 86400 IN NS d-dns.pl.
edu.pl. 86400 IN NS e-dns.pl.
edu.pl. 86400 IN NS f-dns.pl.
edu.pl. 86400 IN NS g-dns.pl.
;; ADDITIONAL SECTION:
a-dns.pl. 86400 IN A 195.187.245.44
b-dns.pl. 86400 IN A 80.50.50.10
d-dns.pl. 86400 IN A 213.172.174.70
e-dns.pl. 86400 IN A 213.218.118.26
f-dns.pl. 86400 IN A 217.17.46.189
f-dns.pl. 86400 IN AAAA 2001:1a68:0:10::189
g-dns.pl. 86400 IN A 149.156.1.6
g-dns.pl. 86400 IN AAAA 2001:6d8:0:1::a:6
;; Query time: 43 msec
;; SERVER: 193.171.255.47#53(193.171.255.47)
;; WHEN: Tue Apr 10 01:43:54 2007
;; MSG SIZE rcvd: 296
i tak dalej...
Zuerst:~ # dig -t ns pjwstk.edu.pl @80.50.50.10
; <<>> DiG 9.3.2 <<>> -t ns pjwstk.edu.pl @80.50.50.10
; (1 server found)
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 32935
;; flags: qr rd; QUERY: 1, ANSWER: 0, AUTHORITY: 2, ADDITIONAL: 2
;; QUESTION SECTION:
;pjwstk.edu.pl. IN NS
;; AUTHORITY SECTION:
pjwstk.edu.pl. 86400 IN NS dns.pjwstk.edu.pl.
pjwstk.edu.pl. 86400 IN NS pjb.pjwstk.edu.pl.
;; ADDITIONAL SECTION:
dns.pjwstk.edu.pl. 86400 IN A 148.81.141.10
pjb.pjwstk.edu.pl. 86400 IN A 80.53.134.186
;; Query time: 19 msec
;; SERVER: 80.50.50.10#53(80.50.50.10)
;; WHEN: Tue Apr 10 01:46:56 2007
;; MSG SIZE rcvd: 99
z rekordu typu A w sekcji dodatkowej widzimy, że:
dns.pjwstk.edu.pl. to 148.81.141.10
i jest on odpowiedzialny za domenę pjwstk.edu.pl.
Typy rekordów DNS:
A adres hosta (ipV4)
AAAA adres hosta (ipV6)
NS autorytatywny serwer nazw (serwer, który trzyma informację o domenie)
CNAME alias (mapowanie nazwy na nazwe)
SOA początek odpowiedzialności za domenę (informacja o komputerze obsługującym domenę)
PTR wskaźnik odwracający adres IP na nazwę hosta (odwrotny DNS)
HINFO informacja o hoście
MX nazwa serwera poczty dla tej domeny
Tutorial DNS - Ethereal można pobrać -> TU
Część 2: DOMENA in-addr.arpa i zdobywanie nazw z IPv4
domena służąca do "odwracania" adresów IP (domyślnie IPv4) na nazwy domen.
Przykładowo jeżeli chcemy dowiedzieć się jaka nazwa dns jest przypisana do ipV4:148.81.141.10 pytamy o 10.141.81.148.in-addr.arpa
Inne subdomeny domeny arpa "odwracają" inne typy adresów:
źródło: wikipedia
* e164.arpa - ENUM lookup mapping telephone numbers into DNS
* in-addr.arpa - reverse DNS lookup for IPv4 addresses
* iris.arpa - For use in CRISP
* ip6.arpa - reverse DNS lookup for IPv6 addresses
* uri.arpa - for dynamic discovery of URI addressing schemes
* urn.arpa - for dynamic discovery of URN addressing schemes
host - Program działający podobnie do dig . Wykonuje różnego rodzaju translacje IPv4 -> dns; IPv6 -> dns i odwrotnie.
Przykład użycia:
tomek@Zuerst:~/tmp> host dns.pjwstk.edu.pl
dns.pjwstk.edu.pl has address 148.81.141.10
dns.pjwstk.edu.pl has IPv6 address 2001:808:102::a1a
tomek@Zuerst:~/tmp> host 148.81.141.10
10.141.81.148.in-addr.arpa domain name pointer dns.pjwstk.edu.pl.
jak widzimy z pierwszego polecenia program zdobył adresy IP V4 oraz V6; z drugiego otrzymaliśmy pointer na dns.pjwstk.edu.pl
W drugim poleceniu program host automatycznie przetłumaczył nasz szukany IP na format odpowiadający "in-addr.arpa".
Poniżej okienko ze sniffera.
pakiety nr 1, 3 i 5 odpowiadają kolejnym zapytaniom dns, które wywołaliśmy poleceniem pierwszym.
pakiety nr 2, 4 i 6 odpowiadają odpowiedziom na powyższe zapytania (czyli pola IPv4, IPv6, MX)
polecenie drugie powoduje wysłanie pakietu nr 11 (pytanie o typ rekordu PTR).
odpowiedź na to pytanie to pakiet nr 12 który jest zaznaczony i widoczny w obszarze środkowym sniffera.
widzimy, że podany adres ip odpowiada domenie dns.pjwstk.edu.pl.
jeżeli chcemy sprawdzić jakieś dodatkowe ip z tej podsieci możemy spróbować przetłumaczyć kolejne IP...
czy znacie te subdomeny ? :)
tomek@Zuerst:~/tmp> host 148.81.141.11
11.141.81.148.in-addr.arpa domain name pointer exch.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.12
12.141.81.148.in-addr.arpa domain name pointer jlab.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.13
13.141.81.148.in-addr.arpa domain name pointer nano.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.14
14.141.81.148.in-addr.arpa domain name pointer ufo.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.15
15.141.81.148.in-addr.arpa domain name pointer npa.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.16
16.141.81.148.in-addr.arpa domain name pointer www.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.17
17.141.81.148.in-addr.arpa domain name pointer io.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.18
Host 18.141.81.148.in-addr.arpa not found: 3(NXDOMAIN)
tomek@Zuerst:~/tmp> host 148.81.141.19
19.141.81.148.in-addr.arpa domain name pointer poczta.pjwstk.edu.pl.
tomek@Zuerst:~/tmp> host 148.81.141.20
20.141.81.148.in-addr.arpa domain name pointer edu.pjwstk.edu.pl.
Ćwiczenie: sprawdzić poleceniem host inne zakresy ip i odkryć resztę szkolnych serwerów
Dla lubiących bash'a proponuję wykorzystać poniższy skrypt ;)
Skrypt tłumaczy ip z podanego zakresu i wyciąga wartość TTL z ping'a (rozpoznawanie Sys.Op. według wartości TTL)
#!/bin/bash
liczba=1
while [ $liczba -lt 120 ]
do
host 148.81.141.$liczba
ping -c 1 148.81.141.$liczba | grep ttl | cut -d" " -f 6
liczba=`expr $liczba + 1`
done
|