773
5
00x01
wget首先会对输入的url进行解析并提取出其中的协议路径等信息,
通过该信息wget建立与服务器的连接并发送请求
服务器收到请求报文后会返回相应的响应报文。
wget会将其解析并响应,如请求成功,
服务器会将资源返回至wget,wget根据响应信息,将资源递归保存至本地。
00x02
windows版本下的wget调用
@echo off & cd /d %~dp0
mode con cols=100
call :showLogo
pause
exit
:showLogo
title Wget downloads tool 2.0-Wget.fit
color 80
mode con cols=72 lines=22
if not exist .outlogo (
echo IF9fICAgICAgICAgIF9fICAgICAgICBfICAgICBfX19fX18gXyBfICAgX19fICAgIF9fXyAgCiBcIFwgICAgICAgIC8gLyAgICAgICB8IHwgICB8ICBfX19fKF8pIHwgfF9fIFwgIC8gXyBcIAogIFwgXCAgL1wgIC8gL18gXyAgX19ffCB8XyAgfCB8X18gICBffCB8XyAgICkgfHwgfCB8IHwKICAgXCBcLyAgXC8gLyBfYCB8LyBfIFwgX198IHwgIF9ffCB8IHwgX198IC8gLyB8IHwgfCB8CiAgICBcICAvXCAgLyAoX3wgfCAgX18vIHxfIF98IHwgICAgfCB8IHxfIC8gL18gfCB8X3wgfAogICAgIFwvICBcLyBcX18sIHxcX19ffFxfXyhfKV98ICAgIHxffFxfX3xfX19fKF8pX19fLyAKICAgICAgICAgICAgIF9fLyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgIHxfX18vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIA==>.logo
certutil -decode .logo .outlogo>nul
del .logo
)
type .outlogo
echo.
echo The principle of this tool is very simple, is to apply wget with bat
echo Official website: www.wget.fit
echo=====================================================================
set /p a=Url(http/https):
color 2f
mode con cols=80 lines=25
wget.exe -U‘Mozilla/5.0 -r -p -np -k --no-check-certificate %a%
cls
title Wget downloads tool 2.0-Wget.fit
echo The task is complete. Press Enter to exit
echo. &pause >nul
00x02
│ api.php api接口
│ common.php 网站全局文件
│ Config.php 网站核心文件
│ index.php 网站主页
│ ssh.class.php ssh认证文件
│ wget_site.sh wget请求文件
└─work 网站预览目录
从网站主页说起
网站主页仅用于请求api.php
if (isset($_POST['url'])) {
$url = $_POST['url'];
$email = $_POST['email'];
if (get_code($url) != 200) {
exit(json_encode(array('code' => '-1', 'msg' => '爬取失败,请检查网址是否正确!'),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
}
$preg = "/^http(s)?:\\/\\/.+/";
if(!preg_match($preg,$url)){
exit(json_encode(array('code' => '-1', 'msg' => '域名请带上协议头!如( http:// 或 https:// )'),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
}
$file = parse_url($url)['host'].'-'.mt_rand(10000,99999);
$ssh = new Components_Ssh($host, $user, $pass, $port, $log);
$ssh->cmd("bash /www/wwwroot/wget.fit/wget_site.sh {$url} {$file} >/dev/null && echo \"success\"");
if(file_exists('./down/'.$file.'.zip')) {
$content='你在Wget.fit提交的扒站请求已结束,下载链接:wget.fit/down/' . $file . '.zip';
$wz=$smtpapi."?adress=".$email."&isHTML=false&title=Wget.fit爬取成功&content=".$content;
file_get_contents($wz);
exit(json_encode(array('code' => '1', 'msg' => '<center><img src="./assets/simple/img/wget.jpg" width="50%" ></center>', 'down' => 'http://wget.fit/down/' . $file . '.zip', 'yulan' => 'http://wget.fit/work/' . $file . '/' . parse_url($url)['host']),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
} else {
exit(json_encode(array('code' => '-1', 'msg' => '爬取失败!'),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
}
} else {
function trans_byte($byte)
{
$KB = 1024;
$MB = 1024 * $KB;
$GB = 1024 * $MB;
$TB = 1024 * $GB;
if ($byte < $KB) {
return $byte . "B";
} elseif ($byte < $MB) {
return round($byte / $KB, 2) . "KB";
} elseif ($byte < $GB) {
return round($byte / $MB, 2) . "MB";
} elseif ($byte < $TB) {
return round($byte / $GB, 2) . "GB";
} else {
return round($byte / $TB, 2) . "TB";
}
}
$list = glob('./down/*.zip');
$count = count($list);
$page_num = isset($_GET['limit'])?$_GET['limit']:10;
$pages = ceil($count / $page_num);
$page = isset($_GET['page'])? $_GET['page']:1;
$startpos = ($page - 1)*$page_num;
$json['code'] = '0';
$json['data'] = $arr;
exit(json_encode($json,JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
}
function get_code($url){
$ch = curl_init();
$timeout = 3;
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch,CURLOPT_URL,$url);
curl_exec($ch);
return $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
}
主要用于以下功能:
首先,它检查是否有名为 'url' 和 'email' 的POST请求参数被发送。
接着,它使用 get_code 函数来检查指定URL的HTTP响应代码是否为200。如果不是200,它将返回一个JSON响应,指示爬取失败并提供错误消息。
接下来,它检查URL是否以"http://"或"https://"开头,如果不是,它会返回一个JSON响应,指示URL应该包含协议头。
然后,它生成一个随机文件名($file),该文件名包括URL的主机名和一个随机数。
通过SSH连接到服务器,并运行一个bash命令来执行爬取操作,将结果保存到名为$file.zip的文件中。
如果爬取成功并且文件存在,它将构建一个包含下载链接的消息,并通过SMTP发送到指定的电子邮件地址。
最后,它返回一个JSON响应,其中包含成功或失败的代码,以及相应的消息和链接。
如果没有接收到 'url' 参数,它将跳转到下面的代码段。
下面的代码段包含了两个函数和一些变量:
trans_byte 函数用于将字节数转换为更容易阅读的格式,如KB,MB,GB,TB等。
$list 变量通过 glob 函数获取指定目录下的所有ZIP文件的文件名,并存储在一个数组中。
$count 变量用于存储ZIP文件的数量。
$page_num 从GET请求参数中获取,用于指定每页显示的ZIP文件数量。
$pages 计算总页数,以便进行分页显示。
$page 从GET请求参数中获取,指示当前页数。
$startpos 用于计算分页的起始位置。
get_code 函数用于检查指定URL的HTTP响应代码。它使用CURL来执行HTTP请求,获取响应代码,并返回它。
以下是对这段代码的注释:
if (isset($_POST['url'])) {
// 检查是否有POST请求参数 'url'
$url = $_POST['url'];
$email = $_POST['email'];
// 获取POST请求中的URL和电子邮件地址
if (get_code($url) != 200) {
// 使用 get_code 函数检查指定URL的HTTP响应代码是否不等于200
exit(json_encode(array('code' => '-1', 'msg' => '爬取失败,请检查网址是否正确!'),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
// 如果响应代码不等于200,返回一个JSON响应,指示爬取失败
}
$preg = "/^http(s)?:\\/\\/.+/";
if(!preg_match($preg, $url)){
// 使用正则表达式检查URL是否以"http://"或"https://"开头
exit(json_encode(array('code' => '-1', 'msg' => '域名请带上协议头!如( http:// 或 https:// )'),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
// 如果URL没有协议头,返回一个JSON响应,提醒用户添加协议头
}
$file = parse_url($url)['host'].'-'.mt_rand(10000,99999);
// 生成一个随机文件名,包括URL的主机名和一个随机数
$ssh = new Components_Ssh($host, $user, $pass, $port, $log);
// 创建SSH连接对象
$ssh->cmd("bash /www/wwwroot/wget.fit/wget_site.sh {$url} {$file} >/dev/null && echo \"success\"");
// 在服务器上执行bash命令,执行爬取操作
if(file_exists('./down/'.$file.'.zip')) {
// 如果爬取成功并且文件存在
$content='你在Wget.fit提交的扒站请求已结束,下载链接:wget.fit/down/' . $file . '.zip';
$wz=$smtpapi."?adress=".$email."&isHTML=false&title=Wget.fit爬取成功&content=".$content;
file_get_contents($wz);
// 发送包含下载链接的消息到指定的电子邮件地址
exit(json_encode(array('code' => '1', 'msg' => '<center><img src="./assets/simple/img/wget.jpg" width="50%" ></center>', 'down' => 'http://wget.fit/down/' . $file . '.zip', 'yulan' => 'http://wget.fit/work/' . $file . '/' . parse_url($url)['host']),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
// 返回一个JSON响应,指示爬取成功,并包含相关信息和链接
} else {
exit(json_encode(array('code' => '-1', 'msg' => '爬取失败!'),JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
// 如果爬取失败,返回一个JSON响应
}
} else {
// 如果没有接收到 'url' 参数
function trans_byte($byte)
{
// 定义一个函数,用于将字节数转换为更易读的格式
$KB = 1024;
$MB = 1024 * $KB;
$GB = 1024 * $MB;
$TB = 1024 * $GB;
if ($byte < $KB) {
return $byte . "B";
} elseif ($byte < $MB) {
return round($byte / $KB, 2) . "KB";
} elseif ($byte < $GB) {
return round($byte / $MB, 2) . "MB";
} elseif ($byte < $TB) {
return round($byte / $GB, 2) . "GB";
} else {
return round($byte / $TB, 2) . "TB";
}
}
$list = glob('./down/*.zip');
$count = count($list);
// 获取指定目录下的ZIP文件列表和文件数量
$page_num = isset($_GET['limit'])?$_GET['limit']:10;
// 获取每页显示的ZIP文件数量,如果未指定则默认为10
$pages = ceil($count / $page_num);
// 计算总页数
$page = isset($_GET['page'])? $_GET['page']:1;
// 获取当前页数,如果未指定则默认为第一页
$startpos = ($page - 1)*$page_num;
// 计算分页的起始位置
$json['code'] = '0';
$json['data'] = $arr;
// 构建JSON响应
exit(json_encode($json,JSON_UNESCAPED_UNICODE| JSON_PRETTY_PRINT));
}
function get_code($url){
$ch = curl_init();
$timeout = 3;
curl_setopt($ch,CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch,CURLOPT_URL,$url);
curl_exec($ch);
return $httpcode = curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
}
进入下一个文件:ssh_class.php
本文链接:
这家伙太懒了,什么也没留下。