IRC-Galleria satunnaispainelija

Sahrah 30.04.08 14:50

Nimensä mukaan tämä koodipätkä painelee IRC-Galleriassa Satunnainen - nappulaa.

 Tekstiversio  Arvo: 1 (5 ääntä)  Äänestä: +  -
<?php
/*

Tämä koodipätkä painelee IRC-Gallerian Satunainen nappulaa
Tarvitsee toimiakseen gallerian laittaman PHPSESSID evästeen.

*/


//Kirjautumiseväste PHPSESSID (näkee selaimen asetuksista, mutta itse käytän ainakin firefoxille, pluginia, jolla voimuokata evästeitä:
$evaste = 'PHPSESSID=TÄHÄN_ID_SI';
//Montako kertaa painetaan Satunnaista
$maara = 4000;

set_time_limit(0); //Ei aikarajaa, no itselläni tästä ei ole hyötyä jos komentorivillä käyttää
function arvo_nick($tulo) { //Painaa satunaista, ottaa parametrinä referille edellisen nickin, jotta näyttäisi palvelimen logissa mahollisiman aidolta ;)
    global $evaste;
    $yhteys = @fsockopen("irc-galleria.net", 80, $errno, $errstr, 10);
   
    //JOS yhteyttä ei jostakin syystä saada muodostettua, pistetää FAILit ja odotetaan 30sek ja siirrytää seuraavalle kierrokselle
    //Kun noita timeoutteja jostakin syystä näyttää tulevan aina välillä....
    if (!$yhteys) {
        echo "FAIL!!! Odotetaan uutta yhteytt\x86 ......\n";
        sleep(30);
        return $tulo;
    }
   
    // samoinkun useragentit ettei pistä silmää lokissa
    $p = "GET /random.php HTTP/1.1\r\n";
    $p .= "Host: irc-galleria.net\r\n";
    $p .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fi; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14\r\n";
    $p .= "Keep-Alive: 300\r\n";
    $p .= "Connection: close\r\n";
    $p .= "Referer: http://irc-galleria.net/view.php?nick=$tulo\r\n";
    $p .= "Cookie: $evaste\r\n\r\n";

    fputs($yhteys, $p); //Lähetetää herra paketti

    while (!feof($yhteys)) { //Silmukoidaan vastaanotettua dataa
        $gets = fgets($yhteys, 128);
        if (preg_match('/(Location: view.php\?nick=)(.{0,})$/m', $gets)) { //JA erotetaa säännöllisellä lausekkeella se sijainti otsikkotiedoista.
            $nick = preg_replace('/(Location: view.php\?nick=)(.{0,})$/m', "$2", $gets);
            fclose($yhteys);
            return trim($nick);
        }
    }
    @fclose($yhteys);
}

function mene ($nick, $tulo) {
    global $evaste;
    $yhteys = fsockopen("irc-galleria.net", 80, $errno, $errstr, 10);

    //Tässä sama kun edellisessä functiossa
    if (!$yhteys) {
        echo "Odotetaan uutta yhteytt\x86......\n";
        sleep(30);
        return $tulo;
    }

    $p = "GET /view.php?nick=$nick HTTP/1.1\r\n";
    $p .= "Host: irc-galleria.net\r\n";
    $p .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fi; rv:1.8.1.14) Gecko/20080404 Firefox/2.0.0.14\r\n";
    $p .= "Keep-Alive: 300\r\n";
    $p .= "Connection: close\r\n";
    $p .= "Referer: http://irc-galleria.net/view.php?nick=$tulo\r\n";
    $p .= "Cookie: $evaste\r\n\r\n";
   
    fputs($yhteys, $p); //Lähetetää paketti perkele
    fclose($yhteys);
}



for ($i = 0; $i < $maara; $i++) { //Silmukoi noita kahta funktiota...

    $nick = arvo_nick($tulo);
    mene($nick, $tulo);
    echo "Kierros $i k\x84yty: $nick\n";
    $tulo = $nick; //Pistetää talteen seuraavaa kierrosta varten niille referereille
}

?>

Sahrah 14:52 30.4.08 
Eka koodivinkki, rivit meni ehkä ävhän pitkisk mutta pitää korja ta kun pä ä sen koti a :P:
editoitu: 16:44 30.4.08
rane 15:47 30.4.08 
Olen tehnyt vastaavan rubylla, tuli kuulemma joitain tuhansia kävijöitä kun näkyi kaikkien vieraslistoissa :p

edit: laitanpa sen nyt vaikka tähän näytille kun kerran löysin sen tuolta

require "erb"
require "net/http"
require "pp"

class IrcGalleria
  HOST = "irc-galleria.net"
 
  def initialize
    ask_account

    login(@user, @pass)
   
    @nicks = []
   
    loop do
      begin
        random
       
        str = @nicks.size.to_s + " " + @nicks.last
        print "\r" + str.ljust(40)
        STDOUT.flush
      rescue => e
        puts e
      end
    end
  end
 
  def ask_account
    begin
      require 'termios'
 
      $stdin.extend Termios

      oldt = $stdin.tcgetattr
      newt = oldt.dup
      newt.lflag &= ~Termios::ECHO

      print "user: "
      @user = $stdin.gets.chomp
      $stdin.tcsetattr(Termios::TCSANOW, newt)
      print "pass: "
      @pass = $stdin.gets.chomp
      print "\n"

      $stdin.tcsetattr(Termios::TCSANOW, oldt)
    rescue LoadError => e
      puts e
      puts
      print "user: "
      @user = gets.chomp
      print "pass: "
      @pass = gets.chomp
    end
  end
   
  def login(username, password)
    @http = Net::HTTP.new(HOST)
    @headers = {}
    data = "login=#{ERB::Util.url_encode(username)}&passwd=#{ERB::Util.url_encode(password)}"
    resp = @http.request_post("/login.php", data)
   
    if resp.response['set-cookie'] =~ /PHPSESSID/
      @headers['Cookie'] = resp.response['set-cookie'].scan(/(PHPSESSID=.+);/).to_s
    else
      raise "Wrong username or password"
    end
  end
 
  def random
    rnd  = @http.request_get("/random.php", @headers)   
    nick = rnd["location"].scan(/=(.*)$/).to_s
    loc  = rnd["location"].gsub(/([^=]+)$/) { |m| ERB::Util.url_encode(m) }
    req  = @http.request_get("/#{loc}", @headers)
   
    @nicks << nick unless @nicks.include?(nick)
  end
end

IrcGalleria.new
ajv 18:32 30.4.08 
Mihin tää maailma on menossa... Hankkikaa ihmiset elämä :D
T.M. 23:12 30.4.08 
lmao +1 @ ajv
sepiseppola 15:02 3.5.08 
Hauska skripti :D vaikka vähän turha onkin :P plussaa!
L3p1_ 13:57 4.5.08 
Mä olinkin jo kyllästyny siihe napin naksutteluun käsin :D. Kyllä tästä tylsään sunnuntaihin taas sisältöä sai.