2016-09-13 15 views
3

私はいくつかのホームオートメーションのために私のルータからデータをスクラップしたいが、私は解決/亀裂ができないいくつかの問題に直面している。ルータからデータを解析するときの認証エラー

私は正常にルータにログインすることができましたが、Pythonスクリプト(ルータWebインターフェイスのリンクを開く)でデータにアクセスすると、次のエラーが表示されます。このルータにアクセスする権限がありません!

PythonスクリプトがブラウザにアクセスしているURL(Cookieが設定されている)を手動でコピー&ペーストすると、応答は同じです。しかし、ルータのWebインターフェイス内のボタンをクリックすると、「権限」という文句が表示されなくなります。任意のアイデアをどのようにこれを修正するには?ここ

はスクリプトです:

import re 
import mechanize 
import cookielib 

br = mechanize.Browser() 

cookies = cookielib.LWPCookieJar() 
br.set_cookiejar(cookies) 
#they "encrypt" the username and password and store it into the cookie. I stole this value from javascript in runtime. 
br.addheaders = [('Cookie','Authorization=Basic YWRtaW46MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM=;')] 
#open connection to the router address 
br.open('http://192.168.1.1/') 
#the only form is "login" form (which we dont have to fill up, because we already have the cookie) 
br.select_form(nr=0) 
br.form.enctype = "application/x-www-form-urlencoded" 
br.submit() 

#then the router returns redirect script, so we have to parse it (get the url). 
redirect_url = re.search('(http:\/\/[^"]+)',br.response().read()).group(1) 
token = re.search("1\/([A-Z]+)\/",redirect_url).group(1) #url always has a random token inside (some kind of security?) 

#So with this url I should be able to navigate to page containing list of DHCP clients 
br.open("http://192.168.1.1/"+token+"/userRpm/AssignedIpAddrListRpm.htm") 

print(br.response().read()) #But response contains html saying "You have no authority to access this router!". 

答えて

1

私はこれを追加することで問題を解決した:

br.addheaders.append(
    ('Referer', "http://192.168.1.1/userRpm/LoginRpm.htm?Save=Save") 
) 

理由:

は、私は、ユーザーフォーラムに移動し、ウェブ上のメッセージを検索しますFirefoxのバージョン(古い)は同じ警告について不平を言った。修正はリファラーが送信されるようにしていたので、私はスクリプトで同じことを行い、それはうまくいった。

関連する問題