私は最近、Microsoft Windows DHCP サーバーのダンプ ファイルを処理し、スプレッドシートの XML 形式を使用して現在の予約の XML ファイルを生成するスクリプトを Python で作成しました。
このスクリプトは、基本的に python open()コマンドを使用してファイルを開き、すべての行(ファイル内の行) を反復処理して、キーワードreservedipを探します。キーワードが見つかった場合、行は shlex split()コマンドを使用してフィールドに分割されます。
ただし、Microsoft DHCP サーバーの既定のダンプ ファイルを使用してこのスクリプトを実行すると、結果が得られません。また、Linux の grep コマンドを使用してファイルを検索できなかったことにも注意してください。
次に、ファイルをgeditで開き、UNIXテキストファイルとして保存しようとしました。これが完了すると、結果が得られ、ファイル内で grep できました。ただし、この方法では、作業を自動化するためにスクリプトを作成するという点がすべて無効になります。
私はグーグルで検索していましたが、探しているものを見つけることができませんでした. ファイルをバイナリモードで開いてみましたが、これも役に立ちませんでした。
誰かがこれで私を助けてくれることを願っています。
リクエストに応じて、スクリプトの動作 (少なくともループ部分) と DHCP サーバーの出力の例を次に示します。
脚本
# Setup an empty dictionary to store the extracted records
records = {}
# Open dhcp dump file
f = open(dhcp.txt, "r")
# Iterate file line by line
for line in f:
# Only use line with the word "reservedip" in it
if "reservedip" in line:
# Split line into fields by spaces (excluding quoted substrings)
field = shlex.split(line)
# Add new entry for each record using the 32bit IP address int as it's key
records[addr_to_int(field[7])] = [field[7], field[8], field[9], field[10]]
*注: addr_to_int は、ドット付き IPv4 アドレスを整数に変換する関数です*
DHCP ダンプ
残念ながら、会社のポリシーにより、実際の DHCP サーバーのダンプを含めることはできません。しかし、ファイルから取得しようとしている行は次のようになります。
DHCP サーバー \\servername.company.local スコープ 172.16.104.0 追加 reservedip 172.16.104.207 003386dd00gg "hostname.company.local" "ホストの説明" "BOTH"
前もってありがとう、パスカル