0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

DHCP Discoverのパケットをscapyで解析してクライアントのホスト名を表示する

Posted at

はじめに

多くのブロードバンドルーターはDHCP ( Dynamic Host Configuration Protocol ) を用いてネットワーク機器に自動的にIPアドレスを割り当てる。DHCPでは初めにDHCPクライアント(ネットワーク機器)がDHCPサーバー(ブロードバンドルーター)に問い合わせをするためにLAN内の全ての宛先(ブロードキャスト)にDHCP Discoverメッセージを送信する。多くの場合、このDHCP Discoverメッセージの中のオプションにクライアントのホスト名が含まれる。このホスト名を抽出することが今回の目標である。

環境

Raspberry Pi OS (32-bit)
Python 3.7.3
scapy==2.4.5

DHCP Discoverメッセージ(DHCPクライアント->DHCPサーバー)をtcpdumpで取得する

sudo apt-get install tcpdump

tcpdumpをインストール

sudo tcpdump -i wlan0 dst port 67 -w test.pcap
  • -i wlan0: 監視するネットワークインターフェースを指定。wlan0は無線LAN。
  • dst port 67: 宛先ポートが67であれば真。67はDHCPクライアントがDHCPサーバ宛にパケットを送る際のポート番号。
  • -w test.pcap: test.pcapというファイル名でログを保存。

scapyでパケットを解析しホスト名を表示する

pip3 install --pre scapy[basic]

pipでscapyをインストール。

parse_dhcp_discover_packet.py
from scapy.all import *
from datetime import datetime

pcap_path = "test.pcap"

packets = rdpcap(pcap_path)

for packet in packets:
    try:
        options = packet[DHCP].options
        for option in options:
            if option[0] == 'hostname':
                hostname = option[1].decode()
                print('Time: {} | Hostname: {}'.format(datetime.fromtimestamp(packet.time), hostname))
    except IndexError as e:
        print(e)
python3 parse_dhcp_discover_packet.py

パケットが送信された時刻とDHCPクライアントのホスト名が表示される。

上記のコードを補足

from scapy.all import *
from datetime import datetime

必要なモジュールをインポート。

pcap_path = "test.pcap"

packets = rdpcap(pcap_path)

tcpdumpで取得したログ(test.pcap)をrdpcapで読み込む。

<Ether  ... |<IP  ... |<UDP  ... |<BOOTP  ... |<DHCP  options=[... hostname=[ホスト名] ...] |>>>>>

packetは上記のように構成されている。packet[DHCP]とすることでDHCPの情報のみ取得できる。
packet[DHCP].optionsでoptionsを取得する。optionsはiterableなのでforでoptionを一つ一つ取り出す。
optionのキーoption[0]'hostname'であるとき、option[1].decode()がホスト名となる。

参考

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?