网站自动登录实现---刷在线时间
不知道大家有没这样的经验,有些网站下载东西需要积分,而在线时间可以积累积分,但是网页15分钟就会超时,你需要一直开着浏览器并刷新,要是有个脚本一直在后台跑着就好了,24小时在线,这就是我要写的内容:
- 仿照登录界面做了个伪表单界面,提交,成功登录,密码不加密(危险啊),看来很简单。(登录多次失败才会要求验证码)。
- 使用Perl LWP写了个提交脚本:
#!/usr/bin/perl use strict; use warnings; use Encode; use Net::INET6Glue::INET_is_INET6; use LWP; use LWP::Simple; use HTTP::Cookies; use HTTP::Response; use HTTP::Request; # 这里的网站是IPV6地址,访问网站主页没问题,但是访问下面的页面时会报HTTP 500错误 # 所以上面引入了Net::INET6Glue::INET_is_INET6,使用ipv6访问 my $url = "http://网站地址/logging.php?action=login"; my $name = "username"; my %form = ( "username" => $name, "password" => "password", # 分析伪表单的抓包数据后发现,表单会自动加上下面的参数,所以加上下面的 # 如果不加总是登录不上去,返回的网页是重新登录界面 "loginsubmit" => "true" ); my $browser = LWP::UserAgent->new; my $response = $browser->post($url,\%form); if ($response->is_success) { print encode("GBK", $response->decoded_content); print "\n"; } else { print $response->decoded_content; die $response->status_line; }
最初测试脚本时是在服务器上测试的,总是Http 500 错误,在Google上搜索发现需要引入INET_is_INET6,不报500错误了,但是返回的界面是重新登录界面。只好抓个包分析一下,发现使用ethereal抓包时,混杂模式启动不了,抓不了其他主机的包,只好在自己机器上安装Perl 来测试。
于是下载ActivePerl,但是在安装模块时出现问题, ,又换成Strawberry Perl,安装INET_is_INET6时同样出错,查看了下是一个依赖包Socket6安装不上,找不到inet_ntop 和inet_pton,又去查资料,发现是个bug,解决方法如下:
单独下载Socket6的包,解包,修改Socket6.xs,代码前添加如下内容:
#define HAVE_INET_PTON 1 #ifdef __MINGW32__ #include "inet_ntop.c" #include "inet_pton.c" #endif #ifndef HAVE_PL_SV_UNDEF #define PL_sv_undef sv_undef #endif
然后手动安装:
$ dmake $ dmake test $ dmake install
再次安装INET_is_INET6搞定,运行,抓包,发现脚本提交表单时没有loginsubmit=true参数,修改,运行,成功。
- 最后写个shell脚本,循环登录:
#!/bin/sh for i in `seq 1000000` do ./autologin.pl > log.htm 2>&1 sleep 10m done
搞了一上午,遇到了很多问题,各种没遇到过的错误,然后一一解决,写起来却轻松多了。但是能解决实际问题,用所学习的东西来实现自己的想法,这种感觉真爽。哈哈,记下了,希望遇到同样问题的可以参考。