作者HZYSoft (PCMan 2007)
看板EZsoft
标题[教学] 详解 Hinedo 抓取 Hinet 广播的原理
时间Sat Nov 24 23:21:39 2007
既然 coca 都开口了,我就针对 Hinedo 写一份 hacking guide
希望下次 hinet 改版的时候,各位可以比我先修改好相关程式
然後寄给我 :P
其实这些抓法都是从阅读网页原始码来的,需要略懂 html,我示范一次:
这个范例,是假设你从 hinet 网页点进 HitFm 联播网 台中91.5 进去
网址为
http://hichannel.hinet.net/radio/radio.jsp?chid=88
检视原始码:
在网页上可以内嵌影片,需要使用 object 或 embed 这两个 html 标签
於是在网页原始码中寻找 <object 或 <embed 字样,可是却找不到?
这表示,如果那段不是用 javascript 动态产生的,就是用 iframe 从其他网页引入
果然,原始码中找到多处 iframe 标签,而在其中,这行显然看起来最像是我们的目标
(如果不知道哪个才是,可以一个一个试连,网址开头 ad.hinet 看就知道是广告,免试)
<iframe width="378" height="338" frameborder="0" scrolling="no"
src="../player/player-radio2.jsp?id=88">
src=後面就是播放介面的网址,开头的 ../ 是相对路径,表示到目前网址的上一层目录
也就是
http://hichannel.hinet.net/radio/ 的上一层
所以合起来就是
http://hichannel.hinet.net/player/player-radio2.jsp?id=88
於是,我们再次连到
http://hichannel.hinet.net/player/player-radio2.jsp?id=88
再次进入网页原始码
还是找不到 embed 或 object,表示嵌入播放器的不是目前网页,还要再找
整个档案并不长,稍微阅读之後,我们发现机关藏在 javascript 内
play = openPlayer = function()
{
w = window.open('/player/radio-f1.jsp?id=88','hichannelPlayer',
'width=675,height=530,scrollbars=yes,resizable=no,status=no,
toolbar=no,menubar=no,location=no');
try{w.focus()}catch(e){};
return false;
}
window.open 这个函数,就是会开新的视窗,而第一个参数就是新视窗的网址
也就是 /player/radio-f1.jsp?id=88
刚刚 ../ 是表示上一层,而 / 是表示根目录,就是所有目录的最上层
也就是主机网址 + /,就是
http://hichannel.hinet.net/
所以 /player/radio-f1.jsp?id=88 完整的网址,就是在
http://hichannel.hinet.net/player/radio-f1.jsp?id=88
再次连线到这个网址,果然被我们逮到了!
再看原始码... 程式有点长,不过,耐心还是找得到...
setMovieFile("../api/streamFreeRadio.jsp?id=88&r="+(new Date()).
getTime(),playerwidth,1,1);
这个函数看起来就有鬼,主要是从 ?id=88 看出来的,88 是电台代码
可以注意到刚刚一层一层剥进来的时候,网址都带着 ?id=88 这个参数
一样,找出完整的网址:
http://hichannel.hinet.net/api/streamFreeRadio.jsp?id=88
後面本来还有用 javascript 依照日期时间,动态产生的参数 r
但是经过测试 Hinet 并没有检查这参数,省略照样可以播放,
看来只是用来混淆视听的,所以,就拿掉它吧。
连到我们刚找出的网址
http://hichannel.hinet.net/api/streamFreeRadio.jsp?id=88
接着连到这个网址,用浏览器有时候没办法取得这个页面的原始码
原因我并不清楚,我是在 Linux 下用 wget 或是其他工具抓网页下来的
看原始码会发现少少的没几行,而电台的网址就在一行 HREF="" 的里面
用 regular expression 很容易就可以抽出来了
详解 Hinedo 的 Play.vbs
Option explicit
Dim sh, reg, matches, match, page, url, base
'这个网址就是上面我们抓出来的网址
base = "
http://hichannel.hinet.net/api/streamFreeRadio.jsp?id="
url = base + WScript.Arguments(0) <<--- 第一个命令列参数为电台代码
Set sh = CreateObject("WScript.Shell")
Function Download( url_to_download ) 用来呼叫主程式下载网页的函数
Dim o
Set o = sh.Exec( """Hinedo.exe"" dl " + url_to_download )
Download = o.StdOut.Readall
Set o = Nothing
End Function
Set reg = New RegExp
reg.Global=True
reg.IgnoreCase = True 'regular expression 忽略大小写差异
page = Download( url )
reg.Pattern = "HREF=""([^""]*)"".*>"
Set matches = reg.Execute( page )
If matches.Count = 0 Then
MsgBox "Error!"
WScript.Quit 1
End If
url = matches(0).SubMatches(0)
page = Download( url )
reg.Pattern = "HREF=""([^""]*)"".*>"
Set matches = reg.Execute( page )
If matches.Count = 0 Then
MsgBox "Error!"
WScript.Quit 1
End If
url = matches(0).SubMatches(0)
'如果有找到网址,则丢给主程式,否则秀'错误'
If url <> "" Then
sh.Run """Hinedo.exe"" " + url
Else
MsgBox "Error!"
End If
--
个人网页:
http://pcman.sayya.org/ 上面有自画像及各种联络资讯
PCMan 全系列 BBS 连线软体
http://pcman.ptt.cc/ http://pcmanx.csie.net/
新酷音输入法 for Windows
http://chewing.csie.net/
IE Tab Firefox plugin/extension
http://ietab.mozdev.org/
PCMan 油画作品集:
http://www.wretch.cc/album/album.php?id=pcman&book=1
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.29.223.38
1F:推 hatebus:再推~ 11/24 23:40
2F:推 mantohu:good ! 11/25 08:08
3F:推 danial:门外汉问一下, 是用什麽程式语言写的呢? 11/25 08:21
4F:→ timyau:visual basic 11/25 08:44
5F:→ timyau:script .. 11/25 08:44
6F:推 HZYSoft:VBScript,Windows 内建,好读好写,不用装额外软体 11/25 08:48
7F:推 EvilBrave:我以为是用 PERL 写的 XD 11/25 10:52
8F:推 JFCC:题外话问一下...我一直找不到电脑不给我执行vbs的原因 11/25 11:10
9F:→ JFCC:有没有人有什麽样的建议@@ 可以让他复活orz 11/25 11:11
10F:推 jimshow2001:防毒吧 大大写的在我的电脑上也跑不顺..K牌真机车 11/25 11:54
11F:推 holanet:我是 Hola,基本上我的 HiRadio 也是跟 HZYSoft 是相同的 11/25 12:09
12F:→ holanet:不过我有点讨厌 Hinet 的方式,要人看广告也不是这样搞的 11/25 12:10
13F:推 JFCC:不是防毒XD 因为他根本就找不到WScript.exe根本就不执行 11/25 12:30
14F:推 yinjing:搞得好像在做侦探节目 囧 11/26 08:35
15F:推 JFCC:搜寻一个叫WSH.inf的档案然後右键安装 可以执行vbs了 02/20 23:38