网站自动登录实现---刷在线时间

不知道大家有没这样的经验,有些网站下载东西需要积分,而在线时间可以积累积分,但是网页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

 

搞了一上午,遇到了很多问题,各种没遇到过的错误,然后一一解决,写起来却轻松多了。但是能解决实际问题,用所学习的东西来实现自己的想法,这种感觉真爽。哈哈,记下了,希望遇到同样问题的可以参考。

 

 

posted @ 2012-06-25 22:07  D3猎人  阅读(746)  评论(0编辑  收藏  举报