最近看到一条命令很有意思,一起来和大家解读一下,这个网站就是bench.sh。
可能搞VPS的朋友很熟悉一条命令
wget -qO- bench.sh | bash
用这条命令可以直接实现linux下运行bench.sh的命令,刚开始奶牛也挺疑惑的,难道wget还自带这种功能,其实不然,命令中的bench.sh是个网站,对,是个网站,访问网站我们可以看到如下提示:
嗨!欢迎使用 Bench.sh
你可以使用以下命令来查看您的 Linux 系统信息,还可以测试网络带宽及硬盘读写速率
wget -qO- bench.sh | bash
或者
curl -Lso- bench.sh | bash
有意思的事儿发生了对么?为什么我们访问网站和我们wget得到的效果不同?因为网站对于user agent进行了识别。如果我们在命令行中执行
wget -O- bench.sh
我们可以看到如下结果:
Resolving bench.sh (bench.sh)... 149.202.55.78
Connecting to bench.sh (bench.sh)|149.202.55.78|:80... connected.
HTTP request sent, awaiting response... 302 Found
Location: http://86.re/bench.sh [following]
Resolving 86.re (86.re)... 104.224.156.154
Connecting to 86.re (86.re)|104.224.156.154|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7017 (6.9K) [application/x-sh]
Saving to: 'STDOUT'
好了,我们看到了一个302的字眼,这个是通过重定向来实现的,直接将使用wget和curl的user agent重定向到了http://86.re/bench.sh这个文件,所以我们wget或者curl得到的是这个文件。这里奶牛猜测原作者应该是用rewrite来写的,直接用web服务器进行ua判定之后rewrite到了这个文件。
奶牛的文章到这里并没有结束,来想想还除了rewrite还有没有其它的实现方法?奶牛感觉还有至少两种实现方法,反代可以实现,还有直接在服务器内进行根目录的重定向也可以实现。奶牛就把后者的实现过程来说一下。web服务器奶牛用的nginx。对网站conf进行配置修改:
server
{
listen 80;
#listen [::]:80;
server_name bench.2fu.org ;
set $target bench.2fu.org ;
if ( $http_user_agent ~* "(wget)|(curl)" )
{
set $target bench.2fu.org/true ;
}
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/$target;
include none.conf;
#error_page 404 /404.html;
# Deny access to PHP files in specific directory
#location ~ /(wp-content|uploads|wp-includes|images)/.*\.php$ { deny all; }
include enable-php.conf;
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}
location ~ .*\.(js|css)?$
{
expires 12h;
}
location ~ /.well-known {
allow all;
}
location ~ /\.
{
deny all;
}
access_log /home/wwwlogs/bench.2fu.org.log;
}
然后将true目录下建立一个index.html然后内容就是bench.sh。这样实现的效果是:
Resolving bench.2fu.org (bench.2fu.org)...
Connecting to bench.2fu.org (bench.2fu.org)|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7017 (6.9K) [text/html]
Saving to: 'STDOUT'
没有302,奶牛更喜欢200 OK 。其实nginx服务器要是折腾折腾配置也很有意思。