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.