Periksa apakah server DHCP ada di jaringan saya menggunakan bash

23

menggunakan CentOS dengan IP statis, Apakah ada cara untuk menentukan apakah server DHCP berjalan di jaringan menggunakan bash?

Steve
sumber

Jawaban:

44

nmap melakukan ini dengan mudah:

sudo nmap --script broadcast-dhcp-discover -e eth0

akan menunjukkan:

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-16 09:25 UTC
Pre-scan script results:
| broadcast-dhcp-discover: 
|   IP Offered: 192.168.14.67
|   DHCP Message Type: DHCPOFFER
|   Server Identifier: 192.168.14.1
|   IP Address Lease Time: 0 days, 0:05:00
|   Subnet Mask: 255.255.255.0
|   Router: 192.168.14.1
|   Domain Name Server: 193.190.127.150
|   Domain Name: maas
|   Broadcast Address: 192.168.14.255
|_  NTP Servers: 91.189.91.157, 91.189.89.199, 91.189.94.4, 91.189.89.198
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.27 seconds
Merlijn Sebrechts
sumber
1
Meskipun jawaban yang ada cukup bagus, saya lebih suka solusi Anda!
Julie Pelletier
1
Perintah yang bagus tetapi perlu dicatat bahwa ini hanya menghasilkan server DHCP pertama yang merespons. Jika ada beberapa server DHCP, perintah ini tidak akan menemukannya.
colek
6

Jika tersedia di repositori ada dhcpdump

dari halaman manual:

SYNOPSIS
       dhcpdump [-h regular-expression] -i interface

DESCRIPTION
       This command parses the output of tcpdump to display the dhcp-packets for easier checking and debugging.

USAGE
       dhcpdump -i /dev/fxp0

       If you want to filter a specific Client Hardware Address (CHADDR), then you can specifiy it as a regular expressions:

       dhcpdump -i /dev/fxp0 -h ^00:c0:4f

       This will display only the packets with Client Hardware Addresses which start with 00:c0:4f.
Pol Hallen
sumber
5

Jika tcpdumptersedia bagi Anda, menjalankan program sebagai root dengan parameter berikut mungkin membantu Anda dalam menemukan server:

tcpdump -i [interface id] -nev udp port 68

Sayangnya, karena tata letak jaringan saya, saya tidak bisa mendapatkan jabat tangan DHCP langsung. Namun, saya memang melihat Permintaan DHCP dari iPad saya:

22:16:44.767371 30:10:e4:8f:02:14 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: (tos 0x0, ttl 255, id 15652, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 30:10:e4:8f:02:14, length 300, xid 0x42448eb6, Flags [none]
      Client-Ethernet-Address 30:10:e4:8f:02:14
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: Request
        Parameter-Request Option 55, length 6: 
          Subnet-Mask, Default-Gateway, Domain-Name-Server, Domain-Name
          Option 119, Option 252
        MSZ Option 57, length 2: 1500
        Client-ID Option 61, length 7: ether 30:10:e4:8f:02:14
        Requested-IP Option 50, length 4: 192.168.2.222
        Lease-Time Option 51, length 4: 7776000
        Hostname Option 12, length 15: "NevinWiamssiPad"

Setelah membiarkan `tcpdump 'berjalan semalaman, saya akhirnya melihat ACK ini:

07:46:40.049423 a8:39:44:96:fa:b8 > 68:a8:6d:58:5b:f3, ethertype IPv4 (0x0800), length 320: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 306)
    192.168.2.1.67 > 192.168.2.22.68: BOOTP/DHCP, Reply, length 278, xid 0x5e7944f, Flags [none]
      Client-IP 192.168.2.22
      Your-IP 192.168.2.22
      Client-Ethernet-Address 68:a8:6d:58:5b:f3
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: ACK
        Server-ID Option 54, length 4: 192.168.2.1
        Lease-Time Option 51, length 4: 86400
        Subnet-Mask Option 1, length 4: 255.255.255.0
        Default-Gateway Option 3, length 4: 192.168.2.1
        Domain-Name-Server Option 6, length 8: 192.168.2.1,142.166.166.166

Jika ketika menjalankan tcpdumpperintah itu, dan Anda melihat Tawaran BOOTP / DHCP atau Ack (Nack), itu akan berasal dari server DHCP, dan alamat MAC server akan tepat setelah stempel waktu di baris pertama.

Jadi server DHCP (valid) di sini memiliki alamat MAC a8: 39: 44: 96: fa: b8`.

Menggunakan salah satu dari banyak alat pencarian alamat MAC di web saya melihat MAC ini milik A8:39:44 Actiontec Electronics, Incrouter saya.

Untuk menangkap paket-paket server DHCP yang tidak benar ketika terjadi, saya harus membiarkan tcpdumpproses ini berjalan di jendela terminal:

tcpdump -i en0 -nev udp src port 67 and not ether host a8:39:44:96:fa:b8

Ini hanya akan menunjukkan kepada saya respons server DHCP dari host selain server DHCP saya yang valid, selama prosesnya berjalan di jendela sendiri.

Perintah berikut ini akan berjalan di latar belakang sampai 100 paket diambil, menambahkan pesan server DHCP jahat ke file /tmp/rogue. Sekali lagi, alamat MAC dari server DHCP Anda yang valid harus digunakan di tempat yang sesuai, serta deskriptor antarmuka pada sistem Anda.

tcpdump -U -i en0 -c 100 -nev udp src port 67 and not ether host a8:39:44:96:fa:b8 >> /tmp/rogue 2>&1 &

`

Nevin Williams
sumber
+1 dulu menggunakan ini setiap saat di jaringan VoIP pelanggan untuk membantu mereka menemukan server DHCP jahat yang mengacaukan layanan mereka.
MaQleod
Ya, saya harus menggunakannya untuk menemukan server DHCP yang nakal pada penyebaran awal jaringan modem kabel sampai kami menemukan cara untuk memfilter port UDP keluar 67 pada setiap jenis modem kabel pra-DOCSIS pada jaringan kami. Bahkan setelah kami mengidentifikasi bajingan itu, tidak selalu mungkin untuk mengidentifikasi modem apa yang ada di belakangnya. Dalam kasus yang parah, kami harus mematikan setiap simpul sampai pemberontakan berhenti, dan kemudian mengisolasi amp apa pada simpul tersebut untuk mempersempit jumlah truk yang akan dibuat MSO. Waktu yang menyenangkan. DOCSIS berumur panjang.
Nevin Williams
solusi sederhana, karena saya ingin sering memeriksa dengan bash
Steve
Jika Anda membiarkan tcpdumpperintah ini berjalan, itu akan menampilkan paket server DHCP yang dikirim oleh alamat MAC yang berbeda dari server DHCP Anda. Tentu saja, Anda harus memberikan alamat di tempat yang ditunjukkan ... Saya akan menempatkannya di jawaban saya saat ini, untuk mendapatkan format yang lebih baik.
Nevin Williams
0

Dengan waktu yang cukup, mungkin untuk melakukan pendeteksian secara pasif: Ingatlah bahwa klien yang menginisialisasi mengirimkan siaran DHCPDISCOVER. Jika dhcpserver tersedia, ia akan memilih tawaran dan kemudian mengirimkan (lagi sebagai siaran!) DHCPREQUEST. Jadi

  • jika Anda menerima siaran DHCPREQUEST, ada server dhcp
  • jika Anda menerima DHCPDISCOVER, tetapi tidak ada DHCPREQUEST dalam satu atau dua detik (untuk menjelaskan server dhcp jarak jauh melalui relay dhcp), tidak ada server dhcp
  • jika Anda bahkan tidak menerima DHCPDISCOVER, Anda harus menunggu lebih lama - atau mencoba untuk secara aktif menemukan server dhcp (misalnya sesuai metode Kenned)

Keberhasilan dua poin pertama deopends pada jumlah host lain yang baru saja terpasang / di-boot ke jaringan dan juga waktu sewa.

Hagen von Eitzen
sumber
0

Anda dapat mencoba membuat perangkat alias dan menggunakan klien dhcp dalam mode pengujian, di mana ia mencetak respons apa pun, tanpa benar-benar mengkonfigurasi ulang antarmuka:

ifconfig eth0:1 up
dhclient -w -n eth0:1

Saya hanya memiliki akses ke kotak debian, jadi jika Anda memiliki implementasi dhcp lain, opsi dry-run mungkin berbeda, seperti untuk dhcpcd:

dhcpcd -T eth0:1

Saya dulu menjalankan skrip cron dengan sesuatu seperti ini, yang akan memberi tahu admin (saya!) Tentang server dhcp jahat.

Kennedy
sumber
1
saat memanggil ifconfig eth0:1 upoutputSIOCSIFFLAGS: Cannot assign requested address
Steve