bash를 사용하여 네트워크에 DHCP 서버가 있는지 확인하십시오.


23

정적 IP로 CentOS를 사용하는 경우 bash를 사용하여 네트워크에서 DHCP 서버가 실행 중인지 확인할 방법이 있습니까?

답변:


44

nmap 이것을 쉽게한다 :

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

표시됩니다:

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
기존 답변은 상당히 좋았지 만 솔루션을 선호합니다!
— Julie Pelletier

1
좋은 명령이지만 이것이 응답 하는 첫 번째 DHCP 서버를 출력한다는 점에 주목할 가치가 있습니다. 여러 개의 DHCP 서버가 존재하면이 명령은 찾지 못합니다.
— 찌르다

6

저장소에서 사용 가능한 경우 dhcpdump가 있습니다.

매뉴얼 페이지에서 :

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

tcpdump사용 가능한 경우 다음 매개 변수를 사용하여 프로그램을 루트로 호출하면 서버를 찾는 데 도움이 될 수 있습니다.

tcpdump -i [인터페이스 ID] -nev udp 포트 68

불행히도 내 네트워크 레이아웃으로 인해 전체 DHCP 핸드 셰이크를 즉시 캡처 할 수 없습니다. 그러나 iPad에서 DHCP 요청이 표시됩니다.

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"

`tcpdump '를 하룻밤 동안 실행시킨 후에 결국이 ACK를 보았습니다.

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

해당 tcpdump명령을 실행할 때 BOOTP / DHCP Offer 또는 Ack (Nack)가 표시되면 DHCP 서버에서 온 것이며 서버의 MAC 주소는 첫 번째 라인의 타임 스탬프 바로 뒤에 있습니다.

따라서 (유효한) DHCP 서버는 MAC 주소 a8 : 39 : 44 : 96 : fa : b8`입니다.

웹에서 많은 MAC 주소 조회 도구 중 하나를 사용 하여이 MAC A8:39:44 Actiontec Electronics, Inc이 내 라우터에 속하는 것을 알 수 있습니다.

불량 DHCP 서버 패킷이 발생할 때이를 포착하려면이 tcpdump프로세스를 터미널 창에서 실행 상태로 두어야합니다 .

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

프로세스가 자체 창에서 실행되는 한 유효한 DHCP 서버 이외의 호스트의 DHCP 서버 응답 만 표시됩니다.

다음 명령은 100 개의 패킷이 캡처 될 때까지 백그라운드에서 실행되어 파일에 불량 DHCP 서버 메시지를 추가합니다 /tmp/rogue. 다시, 유효한 DHCP 서버의 MAC 주소는 시스템의 인터페이스 설명자뿐만 아니라 적절한 위치에서 사용해야합니다.

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은 고객의 VoIP 네트워크에서이 서비스를 항상 사용하여 서비스를 망쳐 놓은 불량 DHCP 서버를 발견하는 데 사용되었습니다.
— MaQleod

예, 네트워크의 각 사전 DOCSIS 케이블 모뎀에서 아웃 바운드 UDP 포트 67을 필터링하는 방법을 알아낼 때까지 케이블 모뎀 네트워크의 초기 배포에서 불량 DHCP 서버를 찾는 데 사용했습니다. 우리가 도적을 식별 한 후에도 그것이 어떤 모뎀 뒤에 있는지 식별하는 것이 항상 가능한 것은 아닙니다. 심한 경우에는 로그가 중지 될 때까지 각 노드를 종료 한 다음 해당 노드의 앰프를 격리하여 MSO가 만들 수있는 트럭 롤 수를 좁혔습니다. 즐거운 시간. 오래 지속되는 DOCSIS.
— 네빈 윌리엄스

bash로 자주 확인하고 싶기 때문에 간단한 해결책이 있습니다.
— Steve

이 tcpdump명령을 실행 상태로두면 DHCP 서버와 다른 MAC 주소로 보낸 DHCP 서버 패킷이 표시됩니다. 물론, 당신은 표시된 장소에 주소를 제공해야합니다 ... 더 나은 형식을 얻으려면 현재 내 대답에 배치 할 것입니다.
— Nevin Williams

0

충분한 시간이 주어지면 수동으로 탐지를 수행 할 수 있습니다. 초기화 클라이언트가 DHCPDISCOVER 브로드 캐스트를 전송한다는 것을 상기하십시오. dhcpserver가 사용 가능한 경우, 제안을 취소 한 다음 DHCPREQUEST를 브로드 캐스트로 다시 보냅니다. 그러므로

  • DHCPREQUEST 브로드 캐스트를 수신하면 dhcp 서버가 있습니다
  • DHCPDISCOVER를 수신했지만 1 초 또는 2 초 내에 DHCPREQUEST가없는 경우 (dhcp 릴레이를 통한 원격 DHCP 서버를 설명하기 위해) DHCP 서버가없는 경우
  • DHCPDISCOVER도받지 못하면 더 오래 기다려야합니다. 또는 dhcp 서버를 적극적으로 찾으십시오 (예 : Kenned의 방법에 따라).

처음 두 지점의 성공은 네트워크에 새로 연결 / 부트 된 다른 호스트 수와 임대 시간으로 인해 열렸습니다.


0

인터페이스를 실제로 재구성하지 않고도 응답을 출력하는 테스트 모드에서 별칭 장치를 만들고 dhcp 클라이언트를 사용해 볼 수 있습니다.

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

데비안 상자에만 액세스 할 수 있으므로 다른 dhcp 구현이있는 경우 dhcpcd와 같이 dry-run 옵션이 다를 수 있습니다.

dhcpcd -T eth0:1

나는 cron 스크립트를 이와 같은 방식으로 실행하여 관리자 (me!)에게 불량 DHCP 서버에 대해 경고했습니다.


1
ifconfig eth0:1 up출력을 호출 할 때SIOCSIFFLAGS: Cannot assign requested address
— Steve
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.