1

Huaweiモバイル ルーターに関する興味深い記事を見つけました: https://blog.hqcodeshop.fi/archives/259-Huawei-E5186-AJAX-API.html

へこみを自分で直そうとしました。ここに結果がありますhttp://pastebin.com/KqF5RsS0 正しいかどうかわかりません。それを実行するためにどのバージョンの Python を使用すればよいかさえわかりません。

sabbath@dell ~> /usr/bin/python2 router-reboot-script.py
Traceback (most recent call last):
  File "router-reboot-script.py", line 6, in <module>
    import requests
ImportError: No module named requests

また

[sabbath@dell ~]$ python -m router-reboot-script.py
/usr/bin/python: Error while finding spec for 'router-reboot-script.py' (AttributeError: module 'router-reboot-script' has no attribute '__path__')

Python のスキルはありません。誰かがそれを実行する方法を理解するのを手伝ってくれますか?

編集

[sabbath@dell ~]$ sudo pip install requests
Requirement already satisfied (use --upgrade to upgrade): requests in /usr/lib/python3.5/site-packages  
You are using pip version 8.1.2, however version 9.0.1 is available.  
You should consider upgrading via the 'pip install --upgrade pip' command.  
[sabbath@dell ~]$ sudo pip install --upgrade pip
Collecting pip  
Downloading pip-9.0.1-py2.py3-none-any.whl (1.3MB)  
100% |████████████████████████████████| 1.3MB 686kB/s 
Installing collected packages: pip
Found existing installation: pip 8.1.2
Uninstalling pip-8.1.2:
Successfully uninstalled pip-8.1.2
Successfully installed pip-9.0.1
[sabbath@dell ~]$ sudo pip install requests
Requirement already satisfied: requests in /usr/lib/python3.5/site-packages
[sabbath@dell ~]$ python -m router-reboot-script.py
/usr/bin/python: Error while finding spec for 'router-reboot-script.py' (AttributeError: module 'router-reboot-script' has no attribute '__path__')
[sabbath@dell ~]$ python router-reboot-script.py

どのバージョンの python を使用する必要がありますか? また、どのような種類のパラメーター (-m など) を使用する必要がありますか?

4

1 に答える 1

3

2 つの問題:

  1. from __future__ import print_functionこれは python 2.x で、 python 3 にはありません。
  2. ペーストビンのコードにフォーマットの問題がありました。Python は空白を使用して、コードのどのブロックが関数やクラスなどにグループ化されているかを示します。空白は正しくありませんでした。以下で修正しました(このペーストビンも参照)

コード:

###########################
#!/usr/bin/python

from __future__ import print_function

import requests
import re
import hashlib
import base64


def login(baseurl, username, password):
    s = requests.Session()
    r = s.get(baseurl + "html/index.html")
    csrf_tokens = grep_csrf(r.text)
    s.headers.update({'__RequestVerificationToken': csrf_tokens[0]})

    # test token on statistics api
    # r = s.get(baseurl + "api/monitoring/statistic-server")

    data = login_data(username, password, csrf_tokens[0])
    r = s.post(baseurl + "api/user/login", data=data)

    s.headers.update({'__RequestVerificationToken': r.headers["__RequestVerificationTokenone"]})
    return s


def reboot(baseurl, session):
    s.post(baseurl + "api/device/control", data='1')


def grep_csrf(html):
    pat = re.compile(r".*meta name=\"csrf_token\" content=\"(.*)\"", re.I)
    matches = (pat.match(line) for line in html.splitlines())
    return [m.group(1) for m in matches if m]


def login_data(username, password, csrf_token):
    def encrypt(text):
        m = hashlib.sha256()
        m.update(text)
        return base64.b64encode(m.hexdigest())

    password_hash = encrypt(username + encrypt(password) + csrf_token)
    return '%s%s4' % (username, password_hash)


WEB = "http://192.168.1.1/"
USERNAME = "admin"
PASSWORD = "admin"

if __name__ == "__main__":
    s = login(WEB, USERNAME, PASSWORD)
reboot(WEB, s)
#########################

最後に、最後の 10 行 (空の行と ##### を除く) を独自の目的で更新する必要があることに注意してください。WEBルーターに正しいとを設定する必要がありUSERNAMEますPASSif __name__ == "__main__":次に、上で行ったように、 で始まる 3 行のコメントを解除する必要があります。

requests パッケージがないためにまだエラーが発生する場合は、この質問への回答を確認してください。

于 2016-11-11T17:09:12.893 に答える