Kiểm tra xem máy chủ DHCP có tồn tại trong mạng của tôi bằng bash không


23

sử dụng CentOS với IP tĩnh, Có cách nào để xác định xem máy chủ DHCP có chạy trên mạng bằng bash không?

Câu trả lời:


44

nmap làm điều này dễ dàng:

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

sẽ hiển thị:

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

1
Mặc dù câu trả lời hiện có khá tốt, tôi rất thích giải pháp của bạn!
Julie Pelletier

1
Lệnh tốt nhưng đáng chú ý là điều này chỉ xuất ra máy chủ DHCP đầu tiên đáp ứng. Nếu nhiều máy chủ DHCP tồn tại, lệnh này sẽ không tìm thấy chúng.
chọc

6

Nếu có sẵn trong kho lưu trữ thì có dhcpdump

từ trang người đàn ông:

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.

5

Nếu bạn có tcpdumpsẵn cho bạn, việc gọi chương trình là root với các tham số sau có thể hỗ trợ bạn trong việc tìm kiếm máy chủ:

tcpdump -i [id giao diện] -nev udp port 68

Thật không may, do cách bố trí mạng của tôi, tôi không thể bắt được một cái bắt tay DHCP đầy đủ ngay lập tức. Tuy nhiên, tôi thấy Yêu cầu DHCP từ iPad của mình:

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"

Sau khi để `tcpdump 'chạy qua đêm, cuối cùng tôi cũng thấy ACK này:

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

Nếu khi chạy tcpdumplệnh đó và bạn thấy Ưu đãi BOOTP / DHCP hoặc Ack (Nack), thì đó sẽ là từ máy chủ DHCP và địa chỉ MAC của máy chủ sẽ ở ngay sau dấu thời gian trên dòng đầu tiên.

Vì vậy, máy chủ DHCP (hợp lệ) ở đây có địa chỉ MAC a8: 39: 44: 96: fa: b8`.

Sử dụng một trong nhiều công cụ tra cứu địa chỉ MAC trên web, tôi thấy MAC này thuộc về A8:39:44 Actiontec Electronics, Incbộ định tuyến của tôi.

Để bắt các gói máy chủ DHCP giả mạo khi chúng xảy ra, tôi sẽ phải để tcpdumpquá trình này chạy trong cửa sổ terminal:

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

Điều này sẽ chỉ hiển thị cho tôi các phản hồi của máy chủ DHCP từ các máy chủ khác ngoài máy chủ DHCP hợp lệ của tôi, miễn là quá trình này đang chạy trong cửa sổ riêng của nó.

Lệnh sau sẽ chạy trong nền cho đến khi bắt được 100 gói, nối thêm bất kỳ tin nhắn máy chủ DHCP giả mạo nào vào tệp /tmp/rogue. Một lần nữa, địa chỉ MAC của máy chủ DHCP hợp lệ của bạn phải được sử dụng ở nơi thích hợp, cũng như mô tả giao diện trên hệ thống của bạn.

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 &

`


+1 đã từng sử dụng điều này mọi lúc trên các mạng VoIP của khách hàng để giúp họ phát hiện ra các máy chủ DHCP lừa đảo đang làm rối tung dịch vụ của họ.
MaQleod

Vâng, tôi đã phải sử dụng nó để tìm các máy chủ DHCP lừa đảo khi triển khai sớm các mạng modem cáp cho đến khi chúng tôi tìm ra cách lọc cổng UDP 67 bên ngoài trên mỗi loại modem cáp trước DOCSIS trên mạng của chúng tôi. Ngay cả sau khi chúng tôi xác định được kẻ lừa đảo, không phải lúc nào cũng có thể xác định được modem nào đứng sau. Trong trường hợp nghiêm trọng, chúng tôi phải tắt từng nút cho đến khi lừa đảo dừng lại, sau đó cô lập amp nào trên nút đó để thu hẹp số lượng xe tải cuộn mà MSO sẽ thực hiện. Thời gian vui vẻ. DOCSIS sống lâu.
Nevin Williams

bất kỳ giải pháp đơn giản nào, vì tôi muốn kiểm tra thường xuyên bằng bash
Steve

Nếu bạn để tcpdumplệnh này chạy, nó sẽ hiển thị các gói máy chủ DHCP được gửi bởi một địa chỉ MAC khác với máy chủ DHCP của bạn. Tất nhiên, bạn sẽ cần cung cấp địa chỉ ở nơi được chỉ định ... Tôi sẽ đặt nó trong câu trả lời của tôi ngay bây giờ, để có được định dạng tốt hơn.
Nevin Williams

0

Có đủ thời gian, có thể thực hiện phát hiện một cách thụ động: Hãy nhớ lại rằng một máy khách khởi tạo sẽ phát đi một chương trình phát DHCPDISCOVER. Nếu một dhcpserver có sẵn, nó sẽ nhận được một lời đề nghị và sau đó phát ra (một lần nữa khi phát sóng!) Một DHCPREQUEST. Như vậy

  • nếu bạn nhận được chương trình phát DHCPREQUEST, có máy chủ dhcp
  • nếu bạn nhận được DHCPDISCOVER, nhưng không có DHCPREQUEST trong vòng một hoặc hai giây (để tính đến các máy chủ dhcp từ xa thông qua chuyển tiếp dhcp), không có máy chủ dhcp
  • nếu bạn thậm chí không nhận được DHCPDISCOVER, bạn phải chờ lâu hơn - hoặc cố gắng chủ động tìm máy chủ dhcp (ví dụ như theo phương pháp của Kenned)

Thành công của hai điểm đầu tiên mở rộng về số lượng máy chủ khác mới được đính kèm / khởi động vào mạng và cả thời gian thuê.


0

Bạn có thể thử tạo một thiết bị bí danh và sử dụng máy khách dhcp trong chế độ thử nghiệm, nơi nó in ra bất kỳ phản hồi nào, mà không thực sự cấu hình lại giao diện:

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

Tôi chỉ có quyền truy cập vào một hộp debian, vì vậy nếu bạn có một triển khai dhcp khác, tùy chọn chạy khô có thể khác, như đối với dhcpcd:

dhcpcd -T eth0:1

Tôi đã từng có một kịch bản cron chạy với một cái gì đó như thế này, nó sẽ cảnh báo cho quản trị viên (tôi!) Về các máy chủ dhcp giả mạo.


1
khi gọi ifconfig eth0:1 upđầu raSIOCSIFFLAGS: Cannot assign requested address
Steve
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.