【 在 javame 的大作中提到: 】
: 这个链接应该怎么抓包分析
:
http://www.yimuhe.com/file-4896364.html: 下面是我抓包过程
: ...................
ps: 周末不上网
整个过程如下(FILEID 是4896364):
step1: 请求文件主页
http://www.yimuhe.com/file-4896364.html (后面所有用到4896364的地方,我全部替换为$FILEID )
记录 response 中 Set-Cookie 的 PHPSESSID,之后所有步骤(除最后一步真实下载之外),全部需要带该Cookie
step2: 请求下载页面
http://www.yimuhe.com/down-$FILEID.html
带第一步中的PHPSESSID ,以及Referer=http://www.yimuhe.com/file-$FILEID.html
在该页面的相应body中,通过正则或者xpath, 获取FILEKEY, FILENAME, FILESER, 后面请求真实下载地址时需要
step3: 请求验证码
http://www.yimuhe.com/n_downcode.php带第一步中的PHPSESSID ,以及Referer=http://www.yimuhe.com/down-$FILEID.html
step4: 通过 post 验证验证码
http://www.yimuhe.com/n_downcode.php 带第一步中的PHPSESSID ,以及Referer=http://www.yimuhe.com/down-$FILEID.html
request body 中添加 action=yz&id=$FILEID&code=输入的验证码
step5: 检查 step4 返回结果
如果是1,说明输入正确,执行step6; 如果是0,说明输入错误,重新执行step4;如果结果是$FILEID, 说明验证码超时,从step1重新开始
step6: 请求真实下载 url ,
http://www.yimuhe.com/n_dd.php?file_id=$FILEID&userlogin=netdzb&p=1&types=http&file_key=$FILEKEY&file_name=$FILENAMEESCAPE&ser=$FILESER
带第一步中的PHPSESSID ,以及Referer=http://www.yimuhe.com/down-$FILEID.html
参数 $FILEKEY,$FILESER,$FILENAMEESCAPE 都是通过step2获取到的
step7:在step6的返回body中,通过正则获取xpath,获取真实下载 url
这个url不检查任何header,不检查任何cookie,不检查任何ua,在有效时间内,可以任意下载
我写了个powershell 脚本,但对于用xp的你来说,没有任何意义,伤心
$FILEID = 4896364
# request main page and record cookies in variable $phpsessions
Invoke-WebRequest -SessionVariable 'phpsessions' "http://www.yimuhe.com/file-$FILEID.html" 1>$null
$phpsessions.Headers.Add("Referer", "http://www.yimuhe.com/file-$FILEID.html")
# request downloadpage
$downloadPageResponse = (Invoke-WebRequest -WebSession $phpsessions "http://www.yimuhe.com/down-$FILEID.html").Content
$match = [regex]::Match($downloadPageResponse, "down_file\('$FILEID','netdzb','([0-9a-zA-Z]+)','([^']+)','([0-9]+)'")
if ($match.Success) {
$FILEKEY = $match.Groups[1].Value
$FILENAME = $match.Groups[2].Value
$FILENAMEESCAPE = [System.Uri]::EscapeDataString($FILENAME)
$FILESER = $match.Groups[3].Value
}
else {
Write-Error "FILEKEY not found"
exit 1
}
$phpsessions.Headers["Referer"] = "http://www.yimuhe.com/down-$FILEID.html"
# download captcha
Invoke-WebRequest -WebSession $phpsessions http://www.yimuhe.com/n_downcode.php -OutFile $env:TEMP\yimuhecaptcha.png 1>$null
#open captcha with default program
explorer.exe $env:TEMP\yimuhecaptcha.png
do {
Write-Host 'Please input captcha'
$readCaptcha = Read-Host
$postParams = @{action = 'yz'; id = $FILEID; code = $readCaptcha }
# validate captcha via post request
$captchaResponse = (Invoke-WebRequest -WebSession $phpsessions http://www.yimuhe.com/n_downcode.php -Method POST -Body $postParams).Content
if ($captchaResponse -eq 1) {
break
}
elseif ($captchaResponse -eq $FILEID) {
# error occured
Remove-Item -Force $env:TEMP\yimuhecaptcha.png
Write-Error "Error occured, please retry"
exit 1
}
Write-Host 'Your input is incorrect'
} while ($true)
# remove temp captcha image
Remove-Item -Force $env:TEMP\yimuhecaptcha.png
# request real download url
$urlResponse = (Invoke-WebRequest -WebSession $phpsessions "http://www.yimuhe.com/n_dd.php?file_id=$FILEID&userlogin=netdzb&p=1&types=http&file_key=$FILEKEY&file_name=$FILENAMEESCAPE&ser=$FILESER").Content
$matchUrl = [regex]::Match($urlResponse, 'href="([^">]+)"\Wid="downs"')
if ($matchUrl.Success) {
$realUrl = $matchUrl.Groups[1].Value
# real downloading file
Invoke-WebRequest -WebSession $phpsessions $realUrl -OutFile "$env:TEMP\$FILENAME"
# open downloaded file
explorer.exe "$env:TEMP\$FILENAME"
}
else {
Write-Error "Download url not found"
exit 1
}
脚本使用动画,请点击图片查看
--
修改:hanjiamajia FROM 211.249.40.*
FROM 211.249.40.*