2011年2月9日水曜日

BeautifulSoupでルータをスクレイピングしてみる

DHCPで自動取得しているネットワークカメラのIPアドレスがわからない。
静的にアドレスを割り当ててもいいが、出来れば自動化したい。
UPnPのブロードキャストとかARPで探すのが正しい方法なんだろうけど、
ブロードバンドルータのAtermWR7870SのUPnPの状態のページにはこのように、
IPアドレスMACアドレス
192.168.1.3  00:A0:B0:00:00:00 
   
IPアドレスとMACアドレスの対応が載っていたので、
BeautifulSoupを使ってスクレイピングしてMACアドレスからIPアドレスを取得してみた。

# -*- coding: utf-8 -*-
# wr7870s.py 2011.2.7

import base64
import urllib2
from BeautifulSoup import BeautifulSoup

def wr7870s_ip_from_mac(mac_adrs, host="192.168.1.1", user="admin", passwd=""):
    url = "http://" + host + "/info_upnp.html"
    req = urllib2.Request(url)
    req.add_header("Authorization", "Basic " + base64.encodestring(user+":"+passwd))
    response = urllib2.urlopen(req, timeout=5)
    data = response.read()
    soup = BeautifulSoup(data)
    for tr in soup('tr', bgcolor="THISTLE"):
        if mac_adrs == tr.contents[3].string.strip():
            ip_adrs = tr.contents[1].string.strip()
            return ip_adrs
    return None

if __name__ == "__main__":
    mac_adrs = "00:A0:B0:00:00:00" # ネットワークカメラのMACアドレス
    passwd = "passwd"
    ip = wr7870s_ip_from_mac(mac_adrs, passwd=passwd)
    print ip,mac_adrs

0 件のコメント: