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
既存の回答はかなり良いものでしたが、私はあなたのソリューションを大いに気に入っています!
ジュリーペレティエ

1
良いコマンドですが、これは応答する最初の DHCPサーバーを出力するだけです。複数のDHCPサーバーが存在する場合、このコマンドはそれらを見つけません。
突く

6

リポジトリで利用可能な場合、dhcpdumpがあります

manページから:

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使用可能な場合は、次のパラメーターを使用してrootとしてプログラムを呼び出すと、サーバーを見つけるのに役立ちます。

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アドレス検索ツールの1つを使用すると、この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で頻繁にチェックしたいので、単純な解決策
スティーブ

このtcpdumpコマンドを実行したままにすると、DHCPサーバーとは異なるMACアドレスによって送信されたDHCPサーバーパケットが表示されます。もちろん、指定された場所に住所を入力する必要があります...より良いフォーマットを得るために、現在、私の答えにそれを配置します。
ネビンウィリアムズ

0

十分な時間があれば、検出を受動的に実行できる可能性があります。初期化クライアントがDHCPDISCOVERブロードキャストを送信することを思い出してください。dhcpserverが利用可能な場合、オファーを取得し、DHCPREQUESTを送信します(再びブロードキャストとして!)。かくして

  • DHCPREQUESTブロードキャストを受信する場合、dhcpサーバーがあります
  • DHCPDISCOVERを受信したが、1、2秒以内にDHCPREQUESTを受信しない場合(DHCPリレー経由でリモートDHCPサーバーを説明するため)、DHCPサーバーはありません
  • DHCPDISCOVERを受信しない場合は、もっと長く待つ必要があります-または、積極的にdhcpサーバーを見つけようとします(たとえば、Kennedの方法による)

最初の2つのポイントが成功すると、ネットワークに新しく接続/起動された他のホストの数とリース時間が明らかになります。


0

実際にインターフェイスを再構成せずに、エイリアスデバイスを作成し、テストモードでdhcpクライアントを使用して、応答を出力することができます。

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

私はdebianボックスにしかアクセスできないため、別のdhcp実装がある場合は、dhcpcdのように、dry-runオプションが異なる場合があります。

dhcpcd -T eth0:1

私はこのようなものでcronスクリプトを実行していました。これは、不正なdhcpサーバーについて管理者(私!)に警告します。


1
ifconfig eth0:1 up出力を呼び出す場合SIOCSIFFLAGS: Cannot assign requested address
スティーブ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.