Пишем spam-list generator Приветствую всех пользователей форума Antichat Моя статейка будет посвящена написанию простого генератора спам-листов. Intro... Интернетом я пользуюсь около 4х лет, пользовался разными почтовыми серверами такими как Yandex, Rambler, Google, Mail и т.д. И было мне интересно, какой из этих серверов менее защищён от наплыва спама который приходит на почтовый ящик, как e-mail попадает в спам базы. После небольшой проверки, как уже наверно многие догадались, менее устойчивым к спаму оказался Mail.ru В то время как на Goole за месяц приходит в лучшем случае 1 письмо со спамом, на Yandex около 10 максимум, а на Rambler около 5-10, на Mail же приходит не менее 70. Посмотрев некоторые сервисы Mail.ru не трудно было догадаться как можно узнать E-mail пользователя. Пример: Блоги.Меил.Ру Видим, что E-mail admin@mail.ru Едем дальше, Фотоальбомы Следовательно E-mail admin2@list.ru Дальше, Мой Мир Также E-mail admin3@mail.ru Самая интересная ссылка, это приглашение какого-то пользователя пообщаться в Mail Агенте Тут открыто видно E-mail admin4@mail.ru Из всего этого, можно отдельно выделить сервис Мой Мир, т.к. там есть поиск по Имени, Фамилии и даже цвету глаз. Допустим, вы создали свой сайт, захотели его раскрутить при помощи спама, вы заходите на Мой Мир, вводите критерии пользователей которым по вашему мнению будет интересен ваш сайт, и всё. Coding... Т.к. статья называется "Пишем spam-list generator", приступим к написанию сего генератора. Писать мы будет на Delphi. Генератор будет полу-автоматическим, поэтому пишем в форму TWebBrowser. В OnCreate для формы пишем: Code: procedure TForm1.FormCreate(Sender: TObject); var Flags: OLEVariant; begin Flags := 0; WebBrowser1.Navigate(WideString('http://my.mail.ru'),Flags,Flags,Flags,Flags); end; Ещё пропишем TMemo и TButton. И не забудем изменить свойство ScrollBars на ssBoth у Memo1. Далее добавим следующую функцию: Code: Function After ( Src:string ; Var S:string ) : string ; Var F : Word ; begin F := POS (Src,S) ; if F=0 then After := '' else After := COPY(S,F+length(src),length(s)) ; end ; В OnClick для Button1 пишем: Code: procedure TForm1.Button1Click(Sender: TObject); var x:word; s,temp,n: string; Flags: OLEVariant; begin for x:=0 to WebBrowser1.OleObject.Document.Links.Length-1 do begin temp:=WebBrowser1.OleObject.Document.Links.Item(x); s:=After('http://www.mail.ru/agent?message&to=',temp); if s <>'' then memo1.lines.Add(s); if x>46 then begin if After('http://my.mail.ru/my/classmates',temp)<>'' then n:=temp; if After('http://my.mail.ru/my/search',temp)<>'' then n:=temp; if After('http://my.mail.ru/my/neighbour',temp)<>'' then n:=temp; if After('http://my.mail.ru/my/military_search',temp)<>'' then n:=temp; end; end; Flags := 0; WebBrowser1.Navigate(WideString(n),Flags,Flags,Flags,Flags); end; Вот и всё The End... Для работы с этим генератором, нужно будет зарегистрироваться в Мой Мир. Далее, просто запускаем генератор, вводим наш логин и пароль, жмём на ссылку Поиск людей, выбираем критерии и жмём найти. Mail показывает сколько нашлось пользователей по заданным критериям, далее жмём на Button1 и в наше Memo1 помещается 20 e-mail’ов, страница обновляется и опять нажимаем на батон и т.д. пока не надоест. Вот впринципе и всё, так при помощи такой "дырки" в Mail.ru можно собирать спам листы
Кстати еще интересная темка.. Заметил ее давно, но никак руки не доходили написать сборщик мыл.. Собственно на ответах мэйл.ру сидит не малое кол-во пользователей. например перебираем И все время попадаем на страницы с вопросами.. На ответах мэйл.ру рядом с "ником" пользователя, создавшего вопрос/коммент есть картинка показывающая статус пользователя (онлайн/оффлайн). Так вот там в ссылке на изображение для статуса указывается e-mail участника в открытом виде. Так что перебирая ссылки на вопросы можно собрать немаленькую базу мыл. На момент написания сообщения последним был вопрос Т.е. это уже 20млн страниц. Да и сообщение Тоже радует.
Смысловая нагрузка не в самой статье - имхо после прочтения может появится пару интересных идей написания "по мотивам".
Накидал скриптик-- Code: #!/usr/bin/perl use IO::Socket; use strict; use threads; use threads::shared; my ($k):shared; my $ot = $ARGV[0]; # Начальная страница my $do = $ARGV[1]; # Конечная $k = 0; my $dir = 'open'; # Директория с открытыми вопросами, можно vote - вопросы на голосовании. my ($socket,$s,$i); open FILE,'>mails.txt'; for(0..$ARGV[2]) {threads->create(\&Grab,$_);} for(threads->list) { $_->join; } sub Grab { for($i=$ot;$i<=$do;$i++) { $socket = IO::Socket::INET->new("otvet.mail.ru:80") || die("Can't connecting!"); print $socket "GET http://otvet.mail.ru/$dir/?asort=0&asc=0&opg=$i HTTP/1.0\r\n". "Host: www.otvet.mail.ru\r\n". "Accept-Language: ru\r\n". "Content-Type: application/x-www-form-urlencoded\r\n". "Content-Length: 214\n\n"; while(<$socket>) { $s = <$socket>; if($s=~/message&to=(.+)\"><img src=\"http/) { $k++; print FILE $1.";\r\n"; }; } close $socket; } } print "END!\r\nPage: $ot - $do\r\nALL: $k\r\n"; close FILE; сие работает многопоточно, запускать так: Code: perl bla.pl [начальная страница] [конечная] [потоки] Сохраняет в mails.txt, формат: Code: bla@list.ru; bla2@mail.ru; ...
собственно я реализовал что-то подобное только на пхп (следовательно без многопоточности) пару деньков назад и вот что получилось: PHP: // Mail harvester by gisTy set_time_limit(0); $crountMax = 200; //через сколько шагов проверять мыльники на наличие повторов и сохранять результат в файл. $crount = 0; $db = 0; $massive[] = ''; $fh = fopen("mails.txt","a");//где mails.txt - файл с мыльниками. for($i = 1;;$i++) { $url = "http://otvet.mail.ru/question/".$i; $packet = file_get_contents($url); preg_match_all("/<span id=\"online:(.*?)\" class=/i", $packet, $result); $mas = array_pop($result); $temp = array_merge($massive, $mas); $massive = $temp; $crount++; if($crount == $crountMax) { $result = array_unique($massive); fwrite($fh, implode("\n",$result)); $db += count($result); unset($massive); $massive[] = ''; unset($result); unset($temp); unset($mas); unset($crount); } $packet = ''; } ?>