PyDHCPLibはPure Pythonで書かれたDHCPパケットのリード/ライトライブラリです。
Pythonで書かれているので、LinuxでもWindowsでも動きます。(Windowsのときはちょっと対策が必要)
まずはdebian Linuxの場合。(aptでインストールできました。追記参照)
$ wget http://pydhcplib.tuxfamily.org/download/pydhcplib-0.6.2.tar.gz
$ tar xvzf pydhcplib-0.6.2.tar.gz
$ cd pydhcplib-0.6.2
$ sudo /usr/bin/python2.6 ./setup.py install
/usr/local/lib/python2.6/dist-packages/pydhcplib
に入りました。
流れてくるパケットを読み取るためにはサーバとして動かします。
examplesディレクトリの中にサーバ用のサンプルが入っているので実行します。
$ sudo /usr/bin/python2.6 ./examples/server_example.py
これでOKです。
ちなみにroot権限で実行しないと、以下のエラーが出てポートが開けられません。
pydhcplib.DhcpNetwork.BindToAddress error : [Errno 13] Permission denied
ではWindowsの場合。
Windows 7にもPython 2.7.2をインストールして使って見ました。
> cd pydhcplib-0.6.2
> C:\Python27\python.exe .\setup.py install
C:\Python27\Lib\site-packages\pydhcplibにインストールされました。
> C:\Python27\python.exe .\examples\server_example.py
Traceback (most recent call last):
File ".\examples\server_example.py", line 21, in <module>
from pydhcplib.dhcp_network import *
File "C:\Python27\lib\site-packages\pydhcplib\dhcp_network.py", line 22, in <module>
import IN
ImportError: No module named IN
インポートエラー。INモジュールというものがないとのこと。
INモジュールはdebianではPythonのplat-linux2ディレクトリ以下に入っています。中身は
# Generated by h2py from /usr/include/netinet/in.h
netinetから変換した定数の定義でした。
なので、必要なところだけコピーしてくることにします。
$ cat /usr/lib/python2.6/plat-linux2/IN.py |grep SO_BINDTODEVICE
SO_BINDTODEVICE = 25
このSO_BINDTODEVICEの定義だけを書いたIN.pyファイルをexamplesディレクトリに置けばOKです。
IN.py
SO_BINDTODEVICE = 25
これで試しにiPod touchをLANに接続して見ました。
> C:\Python27\python.exe .\examples\server_example.py
# Header fields
op : BOOTREQUEST
htype : 1
hlen : 6
hops : 0
xid : 3472825851
secs : 1
flags : 0
ciaddr : 0.0.0.0
yiaddr : 0.0.0.0
siaddr : 0.0.0.0
giaddr : 0.0.0.0
chaddr : 00:26:bb:XX:XX:XX
sname :
file :
# Options fields
client_identifier :
parameter_request_list : subnet_mask,router,domain_name_server,domain_name,domain_search,252
host_name : homma2
request_ip_address : 172.18.0.21
dhcp_message_type : DHCP_REQUEST
ip_address_lease_time : 7776000
maximum_dhcp_message_size : 1285
これでネットワークに接続された端末のリースタイム・MACアドレス・IPアドレスが取れました。
追記
debian squeezeではパッケージ登録されていました。
なので、aptで簡単にインストールできます。
$ aptitude search pydhcplib
p python-pydhcplib – Python DHCP client/server library
v python2.5-pydhcplib –
v python2.6-pydhcplib –
$ sudo aptitude install python-pydhcplib
以上。