commit
079b90d9fd
6 changed files with 1403 additions and 0 deletions
@ -0,0 +1,3 @@ |
|||||||
|
Простой проект управления роутерами `TP-Link` серии `WRxxxN` с помощью `python requests`. |
||||||
|
|
||||||
|
Реализован код для генерации `auth`-токена из пары логин-пароль (адаптирован из js-кода веб-интерфейса роутера), login/logout. |
@ -0,0 +1,201 @@ |
|||||||
|
import base64 |
||||||
|
import ctypes |
||||||
|
import urllib.parse |
||||||
|
|
||||||
|
|
||||||
|
def _32bit(number): |
||||||
|
return ctypes.c_int(number).value |
||||||
|
|
||||||
|
|
||||||
|
def _zero_fill_right_shift(val, n): |
||||||
|
val = _32bit(val) |
||||||
|
n = _32bit(n) |
||||||
|
return _32bit(val >> n) if val >= 0 else _32bit((val + 0x100000000) >> n) |
||||||
|
|
||||||
|
|
||||||
|
def hex_md5(a): |
||||||
|
return binl2hex(core_md5(str2binl(a), len(a) * 8)) |
||||||
|
|
||||||
|
|
||||||
|
def core_md5(p, k): |
||||||
|
p = p + [0] * 1000 |
||||||
|
p[k >> 5] |= 128 << ((k) % 32) |
||||||
|
p[(_zero_fill_right_shift(k + 64, 9) << 4) + 14] = k |
||||||
|
plen = ((_zero_fill_right_shift(k + 64, 9) << 4) + 14) + 1 |
||||||
|
o = 1732584193 |
||||||
|
n = -271733879 |
||||||
|
m = -1732584194 |
||||||
|
l = 271733878 |
||||||
|
for g in range(0, plen, 16): |
||||||
|
j = o |
||||||
|
h = n |
||||||
|
f = m |
||||||
|
e = l |
||||||
|
o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936) |
||||||
|
l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586) |
||||||
|
m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819) |
||||||
|
n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330) |
||||||
|
o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897) |
||||||
|
l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426) |
||||||
|
m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341) |
||||||
|
n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983) |
||||||
|
o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416) |
||||||
|
l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417) |
||||||
|
m = md5_ff(m, l, o, n, p[g + 10], 17, -42063) |
||||||
|
n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162) |
||||||
|
o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682) |
||||||
|
l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101) |
||||||
|
m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290) |
||||||
|
n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329) |
||||||
|
o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510) |
||||||
|
l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632) |
||||||
|
m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713) |
||||||
|
n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302) |
||||||
|
o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691) |
||||||
|
l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083) |
||||||
|
m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335) |
||||||
|
n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848) |
||||||
|
o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438) |
||||||
|
l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690) |
||||||
|
m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961) |
||||||
|
n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501) |
||||||
|
o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467) |
||||||
|
l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784) |
||||||
|
m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473) |
||||||
|
n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734) |
||||||
|
o = md5_hh(o, n, m, l, p[g + 5], 4, -378558) |
||||||
|
l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463) |
||||||
|
m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562) |
||||||
|
n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556) |
||||||
|
o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060) |
||||||
|
l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353) |
||||||
|
m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632) |
||||||
|
n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640) |
||||||
|
o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174) |
||||||
|
l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222) |
||||||
|
m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979) |
||||||
|
n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189) |
||||||
|
o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487) |
||||||
|
l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835) |
||||||
|
m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520) |
||||||
|
n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651) |
||||||
|
o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844) |
||||||
|
l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415) |
||||||
|
m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905) |
||||||
|
n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055) |
||||||
|
o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571) |
||||||
|
l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606) |
||||||
|
m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523) |
||||||
|
n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799) |
||||||
|
o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359) |
||||||
|
l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744) |
||||||
|
m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380) |
||||||
|
n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649) |
||||||
|
o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070) |
||||||
|
l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379) |
||||||
|
m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259) |
||||||
|
n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551) |
||||||
|
o = safe_add(o, j) |
||||||
|
n = safe_add(n, h) |
||||||
|
m = safe_add(m, f) |
||||||
|
l = safe_add(l, e) |
||||||
|
|
||||||
|
return [o, n, m, l] |
||||||
|
|
||||||
|
|
||||||
|
def md5_cmn(h, e, d, c, g, f): |
||||||
|
h = _32bit(h) |
||||||
|
e = _32bit(e) |
||||||
|
d = _32bit(d) |
||||||
|
c = _32bit(c) |
||||||
|
g = _32bit(g) |
||||||
|
f = _32bit(f) |
||||||
|
return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d) |
||||||
|
|
||||||
|
|
||||||
|
def md5_ff(g, f, k, j, e, i, h): |
||||||
|
g = _32bit(g) |
||||||
|
f = _32bit(f) |
||||||
|
k = _32bit(k) |
||||||
|
j = _32bit(j) |
||||||
|
e = _32bit(e) |
||||||
|
i = _32bit(i) |
||||||
|
h = _32bit(h) |
||||||
|
return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h) |
||||||
|
|
||||||
|
|
||||||
|
def md5_gg(g, f, k, j, e, i, h): |
||||||
|
g = _32bit(g) |
||||||
|
f = _32bit(f) |
||||||
|
k = _32bit(k) |
||||||
|
j = _32bit(j) |
||||||
|
e = _32bit(e) |
||||||
|
i = _32bit(i) |
||||||
|
h = _32bit(h) |
||||||
|
return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h) |
||||||
|
|
||||||
|
|
||||||
|
def md5_hh(g, f, k, j, e, i, h): |
||||||
|
g = _32bit(g) |
||||||
|
f = _32bit(f) |
||||||
|
k = _32bit(k) |
||||||
|
j = _32bit(j) |
||||||
|
e = _32bit(e) |
||||||
|
i = _32bit(i) |
||||||
|
h = _32bit(h) |
||||||
|
return md5_cmn(f ^ k ^ j, g, f, e, i, h) |
||||||
|
|
||||||
|
|
||||||
|
def md5_ii(g, f, k, j, e, i, h): |
||||||
|
g = _32bit(g) |
||||||
|
f = _32bit(f) |
||||||
|
k = _32bit(k) |
||||||
|
j = _32bit(j) |
||||||
|
e = _32bit(e) |
||||||
|
i = _32bit(i) |
||||||
|
h = _32bit(h) |
||||||
|
return md5_cmn(k ^ (f | (~j)), g, f, e, i, h) |
||||||
|
|
||||||
|
|
||||||
|
def safe_add(a, d): |
||||||
|
a = _32bit(a) |
||||||
|
d = _32bit(d) |
||||||
|
c = _32bit(_32bit(a & 65535) + _32bit(d & 65535)) |
||||||
|
b = _32bit(_32bit(a >> 16) + _32bit(d >> 16) + _32bit(c >> 16)) |
||||||
|
return _32bit(_32bit(b << 16) | _32bit(c & 65535)) |
||||||
|
|
||||||
|
|
||||||
|
def bit_rol(a, b): |
||||||
|
return _32bit(_32bit(a << b) | _32bit(_zero_fill_right_shift(a, 32 - b))) |
||||||
|
|
||||||
|
|
||||||
|
def str2binl(d): |
||||||
|
c = [None] * 1000 |
||||||
|
a = (1 << 8) - 1 |
||||||
|
for b in range(0, len(d) * 8, 8): |
||||||
|
if c[b >> 5] == None: |
||||||
|
c[b >> 5] = 0 |
||||||
|
c[b >> 5] |= (ord(d[int(b / 8)]) & a) << (b % 32) |
||||||
|
return [s for s in c if s != None] |
||||||
|
|
||||||
|
|
||||||
|
def binl2hex(c): |
||||||
|
b = "0123456789abcdef" |
||||||
|
d = "" |
||||||
|
for a in range(0, len(c) * 4): |
||||||
|
d += ( |
||||||
|
b[int(((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15))] |
||||||
|
+ b[int(((c[a >> 2] >> ((a % 4) * 8)) & 15))] |
||||||
|
) |
||||||
|
return d |
||||||
|
|
||||||
|
|
||||||
|
def Base64Encoding(s): |
||||||
|
return base64.b64encode(s.encode("UTF-8")).decode("UTF-8") |
||||||
|
|
||||||
|
|
||||||
|
def get_cookie(username, password): |
||||||
|
password = hex_md5(password) |
||||||
|
auth = "Basic " + Base64Encoding(username + ":" + password) |
||||||
|
cookie = "Authorization=" + urllib.parse.quote(auth) |
||||||
|
return cookie |
@ -0,0 +1,182 @@ |
|||||||
|
function hex_md5(a) { |
||||||
|
return binl2hex(core_md5(str2binl(a), a.length * 8)) |
||||||
|
} |
||||||
|
|
||||||
|
function core_md5(p, k) { |
||||||
|
p[k >> 5] |= 128 << ((k) % 32); |
||||||
|
p[(((k + 64) >>> 9) << 4) + 14] = k; |
||||||
|
var o = 1732584193; |
||||||
|
var n = -271733879; |
||||||
|
var m = -1732584194; |
||||||
|
var l = 271733878; |
||||||
|
for (var g = 0; g < p.length; g += 16) { |
||||||
|
var j = o; |
||||||
|
var h = n; |
||||||
|
var f = m; |
||||||
|
var e = l; |
||||||
|
o = md5_ff(o, n, m, l, p[g + 0], 7, -680876936); |
||||||
|
l = md5_ff(l, o, n, m, p[g + 1], 12, -389564586); |
||||||
|
m = md5_ff(m, l, o, n, p[g + 2], 17, 606105819); |
||||||
|
n = md5_ff(n, m, l, o, p[g + 3], 22, -1044525330); |
||||||
|
o = md5_ff(o, n, m, l, p[g + 4], 7, -176418897); |
||||||
|
l = md5_ff(l, o, n, m, p[g + 5], 12, 1200080426); |
||||||
|
m = md5_ff(m, l, o, n, p[g + 6], 17, -1473231341); |
||||||
|
n = md5_ff(n, m, l, o, p[g + 7], 22, -45705983); |
||||||
|
o = md5_ff(o, n, m, l, p[g + 8], 7, 1770035416); |
||||||
|
l = md5_ff(l, o, n, m, p[g + 9], 12, -1958414417); |
||||||
|
m = md5_ff(m, l, o, n, p[g + 10], 17, -42063); |
||||||
|
n = md5_ff(n, m, l, o, p[g + 11], 22, -1990404162); |
||||||
|
o = md5_ff(o, n, m, l, p[g + 12], 7, 1804603682); |
||||||
|
l = md5_ff(l, o, n, m, p[g + 13], 12, -40341101); |
||||||
|
m = md5_ff(m, l, o, n, p[g + 14], 17, -1502002290); |
||||||
|
n = md5_ff(n, m, l, o, p[g + 15], 22, 1236535329); |
||||||
|
o = md5_gg(o, n, m, l, p[g + 1], 5, -165796510); |
||||||
|
l = md5_gg(l, o, n, m, p[g + 6], 9, -1069501632); |
||||||
|
m = md5_gg(m, l, o, n, p[g + 11], 14, 643717713); |
||||||
|
n = md5_gg(n, m, l, o, p[g + 0], 20, -373897302); |
||||||
|
o = md5_gg(o, n, m, l, p[g + 5], 5, -701558691); |
||||||
|
l = md5_gg(l, o, n, m, p[g + 10], 9, 38016083); |
||||||
|
m = md5_gg(m, l, o, n, p[g + 15], 14, -660478335); |
||||||
|
n = md5_gg(n, m, l, o, p[g + 4], 20, -405537848); |
||||||
|
o = md5_gg(o, n, m, l, p[g + 9], 5, 568446438); |
||||||
|
l = md5_gg(l, o, n, m, p[g + 14], 9, -1019803690); |
||||||
|
m = md5_gg(m, l, o, n, p[g + 3], 14, -187363961); |
||||||
|
n = md5_gg(n, m, l, o, p[g + 8], 20, 1163531501); |
||||||
|
o = md5_gg(o, n, m, l, p[g + 13], 5, -1444681467); |
||||||
|
l = md5_gg(l, o, n, m, p[g + 2], 9, -51403784); |
||||||
|
m = md5_gg(m, l, o, n, p[g + 7], 14, 1735328473); |
||||||
|
n = md5_gg(n, m, l, o, p[g + 12], 20, -1926607734); |
||||||
|
o = md5_hh(o, n, m, l, p[g + 5], 4, -378558); |
||||||
|
l = md5_hh(l, o, n, m, p[g + 8], 11, -2022574463); |
||||||
|
m = md5_hh(m, l, o, n, p[g + 11], 16, 1839030562); |
||||||
|
n = md5_hh(n, m, l, o, p[g + 14], 23, -35309556); |
||||||
|
o = md5_hh(o, n, m, l, p[g + 1], 4, -1530992060); |
||||||
|
l = md5_hh(l, o, n, m, p[g + 4], 11, 1272893353); |
||||||
|
m = md5_hh(m, l, o, n, p[g + 7], 16, -155497632); |
||||||
|
n = md5_hh(n, m, l, o, p[g + 10], 23, -1094730640); |
||||||
|
o = md5_hh(o, n, m, l, p[g + 13], 4, 681279174); |
||||||
|
l = md5_hh(l, o, n, m, p[g + 0], 11, -358537222); |
||||||
|
m = md5_hh(m, l, o, n, p[g + 3], 16, -722521979); |
||||||
|
n = md5_hh(n, m, l, o, p[g + 6], 23, 76029189); |
||||||
|
o = md5_hh(o, n, m, l, p[g + 9], 4, -640364487); |
||||||
|
l = md5_hh(l, o, n, m, p[g + 12], 11, -421815835); |
||||||
|
m = md5_hh(m, l, o, n, p[g + 15], 16, 530742520); |
||||||
|
n = md5_hh(n, m, l, o, p[g + 2], 23, -995338651); |
||||||
|
o = md5_ii(o, n, m, l, p[g + 0], 6, -198630844); |
||||||
|
l = md5_ii(l, o, n, m, p[g + 7], 10, 1126891415); |
||||||
|
m = md5_ii(m, l, o, n, p[g + 14], 15, -1416354905); |
||||||
|
n = md5_ii(n, m, l, o, p[g + 5], 21, -57434055); |
||||||
|
o = md5_ii(o, n, m, l, p[g + 12], 6, 1700485571); |
||||||
|
l = md5_ii(l, o, n, m, p[g + 3], 10, -1894986606); |
||||||
|
m = md5_ii(m, l, o, n, p[g + 10], 15, -1051523); |
||||||
|
n = md5_ii(n, m, l, o, p[g + 1], 21, -2054922799); |
||||||
|
o = md5_ii(o, n, m, l, p[g + 8], 6, 1873313359); |
||||||
|
l = md5_ii(l, o, n, m, p[g + 15], 10, -30611744); |
||||||
|
m = md5_ii(m, l, o, n, p[g + 6], 15, -1560198380); |
||||||
|
n = md5_ii(n, m, l, o, p[g + 13], 21, 1309151649); |
||||||
|
o = md5_ii(o, n, m, l, p[g + 4], 6, -145523070); |
||||||
|
l = md5_ii(l, o, n, m, p[g + 11], 10, -1120210379); |
||||||
|
m = md5_ii(m, l, o, n, p[g + 2], 15, 718787259); |
||||||
|
n = md5_ii(n, m, l, o, p[g + 9], 21, -343485551); |
||||||
|
o = safe_add(o, j); |
||||||
|
n = safe_add(n, h); |
||||||
|
m = safe_add(m, f); |
||||||
|
l = safe_add(l, e) |
||||||
|
} |
||||||
|
return Array(o, n, m, l) |
||||||
|
} |
||||||
|
|
||||||
|
function md5_cmn(h, e, d, c, g, f) { |
||||||
|
console.log(c, safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d)) |
||||||
|
return safe_add(bit_rol(safe_add(safe_add(e, h), safe_add(c, f)), g), d) |
||||||
|
} |
||||||
|
|
||||||
|
function md5_ff(g, f, k, j, e, i, h) { |
||||||
|
return md5_cmn((f & k) | ((~f) & j), g, f, e, i, h) |
||||||
|
} |
||||||
|
|
||||||
|
function md5_gg(g, f, k, j, e, i, h) { |
||||||
|
return md5_cmn((f & j) | (k & (~j)), g, f, e, i, h) |
||||||
|
} |
||||||
|
|
||||||
|
function md5_hh(g, f, k, j, e, i, h) { |
||||||
|
return md5_cmn(f ^ k ^ j, g, f, e, i, h) |
||||||
|
} |
||||||
|
|
||||||
|
function md5_ii(g, f, k, j, e, i, h) { |
||||||
|
return md5_cmn(k ^ (f | (~j)), g, f, e, i, h) |
||||||
|
} |
||||||
|
|
||||||
|
function safe_add(a, d) { |
||||||
|
var c = (a & 65535) + (d & 65535); |
||||||
|
var b = (a >> 16) + (d >> 16) + (c >> 16); |
||||||
|
return (b << 16) | (c & 65535) |
||||||
|
} |
||||||
|
|
||||||
|
function bit_rol(a, b) { |
||||||
|
return (a << b) | (a >>> (32 - b)) |
||||||
|
} |
||||||
|
|
||||||
|
function str2binl(d) { |
||||||
|
var c = Array(); |
||||||
|
var a = (1 << 8) - 1; |
||||||
|
for (var b = 0; b < d.length * 8; b += 8) { |
||||||
|
c[b >> 5] |= (d.charCodeAt(b / 8) & a) << (b % 32) |
||||||
|
} |
||||||
|
return c |
||||||
|
} |
||||||
|
|
||||||
|
function binl2hex(c) { |
||||||
|
var b = "0123456789abcdef"; |
||||||
|
var d = ""; |
||||||
|
for (var a = 0; a < c.length * 4; a++) { |
||||||
|
d += b.charAt((c[a >> 2] >> ((a % 4) * 8 + 4)) & 15) + b.charAt((c[a >> 2] >> ((a % 4) * 8)) & 15) |
||||||
|
} |
||||||
|
return d |
||||||
|
} |
||||||
|
|
||||||
|
function Base64Encoding(d) { |
||||||
|
var b = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; |
||||||
|
var a = ""; |
||||||
|
var l, j, g, k, h, f, e; |
||||||
|
var c = 0; |
||||||
|
while (c < d.length) { |
||||||
|
l = d.charCodeAt(c++); |
||||||
|
j = d.charCodeAt(c++); |
||||||
|
g = d.charCodeAt(c++); |
||||||
|
k = l >> 2; |
||||||
|
h = ((l & 3) << 4) | (j >> 4); |
||||||
|
f = ((j & 15) << 2) | (g >> 6); |
||||||
|
e = g & 63; |
||||||
|
if (isNaN(j)) { |
||||||
|
f = e = 64 |
||||||
|
} else { |
||||||
|
if (isNaN(g)) { |
||||||
|
e = 64 |
||||||
|
} |
||||||
|
} |
||||||
|
a = a + b.charAt(k) + b.charAt(h) + b.charAt(f) + b.charAt(e) |
||||||
|
} |
||||||
|
return a |
||||||
|
} |
||||||
|
|
||||||
|
function utf8_encode(b) { |
||||||
|
b = b.replace(/\r\n/g, "\n"); |
||||||
|
var a = ""; |
||||||
|
for (var e = 0; e < b.length; e++) { |
||||||
|
var d = b.charCodeAt(e); |
||||||
|
if (d < 128) { |
||||||
|
a += String.fromCharCode(d) |
||||||
|
} else { |
||||||
|
if ((d > 127) && (d < 2048)) { |
||||||
|
a += String.fromCharCode((d >> 6) | 192); |
||||||
|
a += String.fromCharCode((d & 63) | 128) |
||||||
|
} else { |
||||||
|
a += String.fromCharCode((d >> 12) | 224); |
||||||
|
a += String.fromCharCode(((d >> 6) & 63) | 128); |
||||||
|
a += String.fromCharCode((d & 63) | 128) |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return a |
||||||
|
}; |
@ -0,0 +1,77 @@ |
|||||||
|
import time |
||||||
|
import logging |
||||||
|
import requests |
||||||
|
from cookie_tplink_wr_series import get_cookie |
||||||
|
from my_secrets import my_secrets |
||||||
|
|
||||||
|
logging.basicConfig(encoding="utf-8", level=logging.INFO) # filename="example.log" |
||||||
|
|
||||||
|
|
||||||
|
class TPLink(object): |
||||||
|
def __init__(self, ip="192.168.0.1", login="", password=""): |
||||||
|
self.ip = f"http://{ip}" |
||||||
|
self.auth_cookie = get_cookie(login, password) |
||||||
|
self.session_id = "" |
||||||
|
|
||||||
|
def login(self): |
||||||
|
have_new_sid = False |
||||||
|
for _ in range(3): |
||||||
|
req = requests.get( |
||||||
|
f"{self.ip}/userRpm/LoginRpm.htm?Save=Save", |
||||||
|
headers={"Referer": f"{self.ip}/", "Cookie": self.auth_cookie}, |
||||||
|
) |
||||||
|
|
||||||
|
if req.status_code != 200: |
||||||
|
logging.warning( |
||||||
|
f"Failed login with token '{self.auth_cookie}' (request code != 200)" |
||||||
|
) |
||||||
|
continue |
||||||
|
|
||||||
|
params = req.text.split("/") |
||||||
|
if len(params) >= 3: |
||||||
|
if len(params[3]) == 16: |
||||||
|
self.session_id = params[3] |
||||||
|
have_new_sid = True |
||||||
|
logging.info(f"Successfully login to session {self.session_id}") |
||||||
|
break |
||||||
|
|
||||||
|
time.sleep(0.1) |
||||||
|
|
||||||
|
if not have_new_sid: |
||||||
|
self.session_id = "" |
||||||
|
logging.warning( |
||||||
|
f"Failed login with token '{self.auth_cookie}' (can't get session id)" |
||||||
|
) |
||||||
|
|
||||||
|
def logout(self): |
||||||
|
have_logout = False |
||||||
|
for _ in range(3): |
||||||
|
req = requests.get( |
||||||
|
f"{self.ip}/{self.session_id}/userRpm/LogoutRpm.htm", |
||||||
|
headers={ |
||||||
|
"Referer": f"{self.ip}/{self.session_id}/userRpm/MenuRpm.htm", |
||||||
|
"Cookie": self.auth_cookie, |
||||||
|
}, |
||||||
|
) |
||||||
|
|
||||||
|
if req.status_code != 200: |
||||||
|
logging.warning( |
||||||
|
f"Failed logout from session '{self.session_id}' (request code != 200)" |
||||||
|
) |
||||||
|
continue |
||||||
|
else: |
||||||
|
have_logout = True |
||||||
|
break |
||||||
|
|
||||||
|
time.sleep(1) |
||||||
|
|
||||||
|
if not have_logout: |
||||||
|
self.session_id = "" |
||||||
|
logging.warning(f"Failed logout") |
||||||
|
else: |
||||||
|
logging.info(f"Successfully logout from session {self.session_id}") |
||||||
|
|
||||||
|
|
||||||
|
router = TPLink(login=my_secrets.login, password=my_secrets.password) |
||||||
|
router.login() |
||||||
|
router.logout() |
Loading…
Reference in new issue