Wireshark - DHCP
DHCP - trochę teorii
DHCP (ang. Dynamic Host Configuration Protocol – protokół dynamicznego konfigurowania hostów) – protokół komunikacyjny umożliwiający hostom uzyskanie od serwera danych konfiguracyjnych, np. adresu IP hosta, adresu IP bramy sieciowej, adresu serwera DNS, maski podsieci. Protokół DHCP jest zdefiniowany w RFC 2131 i jest następcą BOOTP. DHCP został opublikowany jako standard w roku 1993.
W kolejnej generacji protokołu IP, czyli IPv6, jako integralną część dodano nową wersję DHCP, czyli DHCPv6. Jego specyfikacja została opisana w RFC 3315.
W sieci opartej na protokole TCP/IP każdy komputer ma co najmniej jeden adres IP i jedną maskę podsieci; dzięki temu może się komunikować z innymi urządzeniami w sieci.
Komunikaty
- DHCPDISCOVER – zlokalizowanie serwerów
- DHCPOFFER – przesyłanie parametrów
- DHCPREQUEST – żądanie przydzielenia używanych parametrów
- DHCPACK – potwierdzenie przydziału parametrów
- DHCPNAK – odmowa przydziału parametrów
- DHCPDECLINE – wskazanie że adres sieciowy jest już używany
- DHCPRELEASE – zwolnienie adresu
- DHCPINFORM – żądanie przydziału parametrów (bez adresu IP)
Nagłówek DHCP
00 – 07 | 08 – 15 | 16 – 23 | 24 – 31 | ||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
operacja | typ sprzętu | długość adresu sprzętowego | liczba skoków | ||||||||||||||||||||||||||||
xid (identyfikator transakcji) | |||||||||||||||||||||||||||||||
liczba sekund | flagi | ||||||||||||||||||||||||||||||
adres IP klienta | |||||||||||||||||||||||||||||||
przydzielony adres IP klienta | |||||||||||||||||||||||||||||||
adres IP serwera | |||||||||||||||||||||||||||||||
adres IP bramki (routera) | |||||||||||||||||||||||||||||||
adres sprzętowy klienta (16 oktetów) | |||||||||||||||||||||||||||||||
nazwa serwera (64 oktety) | |||||||||||||||||||||||||||||||
plik startowy (128 oktetów) | |||||||||||||||||||||||||||||||
opcje producenta (długość zmienna) |
- Operacja
- Typ nagłówka. 1 = BOOTREQUEST, 2 = BOOTREPLY
- Typ sprzętu
- Liczba z zakresu 1-28 oznaczająca typ sprzętu (karty sieciowej). Dla sieci ethernetowej przyjmuje wartość 1.
- Długość adresu sprzętowego
- Oznaczenie długości używanego adresu sprzętowego np. 6 dla Ethernetu 10 Mbps.
- Liczba skoków
- Pole jest opcjonalne. Zlicza liczbę pośrednich routerów biorących udział w transmisji pakietu.
- Identyfikator transakcji
- Wybierany losowo przez klienta identyfikator (w sytuacji, gdy serwer nie będzie w stanie "zrozumieć" adresu sprzętowego klienta. Wyśle odpowiedź na broadcast, a xid będzie jedynym sposobem rozpoznania odpowiedzi kierowanej do klienta).
- Liczba sekund
- Mierzony w sekundach czas, jaki upłynął od momentu pierwszego wysłania przez klienta wiadomości typu BOOTREQUEST.
- Flagi
- W tej chwili używany tylko 1 bit (BROADCAST flag). Pozostałe 15 bitów jest zarezerwowane na zastosowanie w przyszłości.
- Adres IP klienta
- Pole nieobowiązkowe. Wypełniane w przypadku np. odświeżania adresu.
- Przydzielony adres IP klienta
- Trzy możliwości przydzielania adresu: ręcznie (na podstawie MAC), automatycznie (kolejność zgłaszania) i dynamicznie (tylko na pewien okres).
- Adres IP serwera
- Ustawiane przez serwer.
- Adres IP bramki
- Ustawiane przez serwer.
- Adres sprzętowy klienta
- Adres MAC klienta.
- Nazwa serwera
- Pole opcjonalne. Nazwa hosta serwera.
- Plik startowy
- Używany w mechanizmie ciasteczek (Magic Cookie).
- Opcje
- Zestaw ponumerowanych opcji 0-254 np.
DHCP option 50: 192.168.1.100 requested
- Klient prosi serwer o przydzielenie danego adres IP [1]
Przechwycenie pakietów
- Uruchom Wireshark
- Włącz przechwytywanie
- Wpisz
ipconfig /release
- Wpisz
ipconfig /renew
- Wyłącz przechwytywanie
- Filtrujemy wyniki wpisując
bootp.option.type == 53
lubudp.port == 68
, lubudp.port == 67
Powinniśmy uzyskać taki efekt.
DHCP Release
Jak widzimy na obrazku, pierwszy pojawił się komunikat DHCP Release. Jest to efekt wydania polecenie ipconfig /release
, które jak wiadomo służy do porzucenie automatycznej adresacji.
Informacje nagłówkowe są widocze w programie Wireshark
Uzyskanie automatycznego adresu
Jak widać po kolei:
- DHCPDISCOVER – Klient chcący się połączyć z serwerem wysyła do sieci lokalnej pakiety rozgłoszeniowe zaadresowane do wszystkich odbiorców. Procedura ta nosi nazwę DHCP DISCOVER – odkrywanie DHCP. Czasami routery są konfigurowane, aby przekazywały pakiety DHCP do właściwego serwera w innej podsieci. Pakiety mają adres docelowy rozgłoszeniowy 255.255.255.255 i zawierają prośbę o ostatnio używany adres IP (np. 192.168.1.100). Może ona zostać zignorowana przez serwer.
- DHCPOFFER – Oferta DHCP jest składana przez serwer, który określa właściwą konfigurację klienta na podstawie sprzętowego adresu urządzenia sieciowego określonego w polu CHADDR (w sieci lokalnej to adres MAC). W polu YIADDR (adres IP klienta) serwer przekazuje klientowi jego adres IP.
- DHCPREQUEST – W odpowiedzi na ofertę klient wysyła Żądanie DHCP, w którym żada zaoferowanego adresu.
- DHCPACK – Potwierdzenie DHCP (ang. DHCP Acknowledge) jest wysyłane jako odpowiedź na żądanie. Zakłada się, że reakcją klienta na potwierdzenie będzie odpowiednie skonfigurowanie interfejsu sieciowego.[2]
Przykładowe nagłówki
Poniżej przykładowe nagłówki [3]
DHCPDISCOVER
Ethernet: source= sender's MAC; destination=FF:FF:FF:FF:FF:FF | |||
IP: source=0.0.0.0; destination=255.255.255.255 | |||
Octet 0 | Octet 1 | Octet 2 | Octet 3 |
---|---|---|---|
OP | HTYPE | HLEN | HOPS |
0x01 | 0x01 | 0x06 | 0x00 |
XID | |||
0x3903F326 | |||
SECS | FLAGS | ||
0x0000 | 0x0000 | ||
CIADDR (Client IP address) | |||
0x00000000 | |||
YIADDR (Your IP address) | |||
0x00000000 | |||
SIADDR (Server IP address) | |||
0x00000000 | |||
GIADDR (Gateway IP address) | |||
0x00000000 | |||
CHADDR (Client hardware address) | |||
0x00053C04 | |||
0x8D590000 | |||
0x00000000 | |||
0x00000000 | |||
192 octets of 0s, or overflow space for additional options; BOOTP legacy. | |||
Magic cookie | |||
0x63825363 | |||
DHCP options | |||
0x350101 53: 1 (DHCP Discover) | |||
0x3204c0a80164 50: 192.168.1.100 requested | |||
0x370401030f06 55 (Parameter Request List):
1 (Request Subnet Mask), 3 (Router), 15 (Domain Name), 6 (Domain Name Server) | |||
0xff 255 (Endmark) |
DHCPOFFER
Ethernet: source= sender's MAC; destination=client mac address | ||||
IP: source=192.168.1.1; destination=255.255.255.255 | ||||
Octet 0 | Octet 1 | Octet 2 | Octet 3 | |
---|---|---|---|---|
OP | HTYPE | HLEN | HOPS | |
0x02 | 0x01 | 0x06 | 0x00 | |
XID | ||||
0x3903F326 | ||||
SECS | FLAGS | |||
0x0000 | 0x0000 | |||
CIADDR (Client IP address) | ||||
0x00000000 | ||||
YIADDR (Your IP address) | ||||
0xC0A80164 (192.168.1.100) | ||||
SIADDR (Server IP address) | ||||
0xC0A80101 (192.168.1.1) | ||||
GIADDR (Gateway IP address) | ||||
0x00000000 | ||||
CHADDR (Client hardware address) | ||||
0x00053C04 | ||||
0x8D590000 | ||||
0x00000000 | ||||
0x00000000 | ||||
192 octets of 0s; BOOTP legacy. | ||||
Magic cookie | ||||
0x63825363 | ||||
DHCP options | ||||
53: 2 (DHCP Offer) | ||||
1 (subnet mask): 255.255.255.0 | ||||
3 (Router): 192.168.1.1 | ||||
51 (IP address lease time): 86400s (1 day) | ||||
54 (DHCP server): 192.168.1.1 | ||||
6 (DNS servers): 9.7.10.15, 9.7.10.16, 9.7.10.18 |
DHCPREQUEST
Ethernet: source= sender's MAC; destination=FF:FF:FF:FF:FF:FF | ||||
IP: source=0.0.0.0 destination=255.255.255.255;Szablon:Efn | ||||
Octet 0 | Octet 1 | Octet 2 | Octet 3 | |
---|---|---|---|---|
OP | HTYPE | HLEN | HOPS | |
0x01 | 0x01 | 0x06 | 0x00 | |
XID | ||||
0x3903F326 | ||||
SECS | FLAGS | |||
0x0000 | 0x0000 | |||
CIADDR (Client IP address) | ||||
0x00000000 | ||||
YIADDR (Your IP address) | ||||
0x00000000 | ||||
SIADDR (Server IP address) | ||||
0xC0A80101 (192.168.1.1) | ||||
GIADDR (Gateway IP address) | ||||
0x00000000 | ||||
CHADDR (Client hardware address) | ||||
0x00053C04 | ||||
0x8D590000 | ||||
0x00000000 | ||||
0x00000000 | ||||
192 octets of 0s; BOOTP legacy. | ||||
Magic cookie | ||||
0x63825363 | ||||
DHCP options | ||||
53: 3 (DHCP Request) | ||||
50: 192.168.1.100 requested | ||||
54 (DHCP server): 192.168.1.1 |
DHCPACK
Ethernet: source= sender's MAC; destination=client's MAC | |||
IP: source=192.168.1.1; destination=192.168.1.100 | |||
Octet 0 | Octet 1 | Octet 2 | Octet 3 |
---|---|---|---|
OP | HTYPE | HLEN | HOPS |
0x02 | 0x01 | 0x06 | 0x00 |
XID | |||
0x3903F326 | |||
SECS | FLAGS | ||
0x0000 | 0x0000 | ||
CIADDR (Client IP address) | |||
0x00000000 | |||
YIADDR (Your IP address) | |||
0xC0A80164 (192.168.1.100) | |||
SIADDR (Server IP address) | |||
0xC0A80101 (192.168.1.1) | |||
GIADDR (Gateway IP address switched by relay) | |||
0x00000000 | |||
CHADDR (Client hardware address) | |||
0x00053C04 | |||
0x8D590000 | |||
0x00000000
| |||
0x00000000 | |||
192 octets of 0s. BOOTP legacy | |||
Magic cookie | |||
0x63825363 | |||
DHCP options | |||
53: 5 (DHCP ACK) or 6 (DHCP NAK) | |||
1 (subnet mask): 255.255.255.0 | |||
3 (Router): 192.168.1.1 | |||
51 (IP address lease time): 86400s (1 day) | |||
54 (DHCP server): 192.168.1.1 | |||
6 (DNS servers): 9.7.10.15, 9.7.10.16, 9.7.10.18 |