Идея интересная, но будущего нет (ИМХО). Было бы интереснее, если реализовать в виде online-сервиса, написав, скажем, на PHP. А то при расширении функционала возникнут проблемы: 1. Не у всех широкий канал. Если добавть определение ТИЦ, ПР, отправку сообщений, то будет тратиться неоправданно много трафика. 2. При обновлении программы (а они, я думаю, будут довольно часто на первых порах) каждый раз придется выкачивать новую версию, а если будет сервисом, то просто один раз изменить код на сервере. 3. А так функционал программы можно расширять практически бесконечно: добавить автоподбор полей/таблиц, брутер слепых инъекций и т.п. Ведь было бы куда полезнее, чем просто выкладывать голую ссылку с минимумом системной информации. В общем, удачи в кодинге .
Вобщем, решил начать с интерфйса, так как дизайнер я не зе бест, то хочу посоветоваться с вами, как лучше оформить программу. Вот так сказать мой вариант, жду ваших предложений.. ЗЫЖ Хочу на делфях, а дальше посмотрим =)
Assembler, вот моя прога: http://forum.antichat.ru/thread100240.html там все в стиле ачата) +сорс и компонент TRegExpr в архиве
eLWAux, не пугай меня так =) Я уж думал она именно то делает что я хочу =) а вот за TregExpr спасиб =) И такс, первый вопрос, хочу сделать так чтобы прога перед началом работы при нажатии кнопки загружала антибоян 1(раз перед началом работы) И потом уже внутри себя по нему проверяла сайты на боян... Подскажите каким путем это можно сделать, желательно понятным для меня языком, то есть не слишком замудренно...
откуда загружать? из сайта или из файла? -- загружаеш, например в listbox и потом можно проверить: if (listbox.items.indexof('сайт')>0) begin уже есть такой end;
реализация через сокети: Code: uses ...,WinSock, ..; const host = 'www.google.com'; //хост .... var sock : TSocket; .... function create_packet(url:string):string; begin result := 'GET '+url+' HTTP/1.0' + #13#10 + 'Host: ' + Host + #13#10 + 'User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)' + #13#10 + 'Accept: text/html' + #13#10 + 'Keep-Alive: 300'+ #13#10 + 'Referer: '+url+ #13#10 + 'Connection: keep-alive' + #13#10#13#10; end; function GET(packet: string): string; var wData : WSADATA; addr : sockaddr_in; sock : integer; error : integer; buf : array [0..1023] of Char; str : string; phe : PHostEnt; begin Result := ''; WSAStartup($0101, wData); phe := gethostbyname(PChar(string(host))); if phe = nil then begin WSACleanup; exit; end; sock := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if sock = INVALID_SOCKET then begin WSACleanup; exit; end; addr.sin_family := AF_INET; addr.sin_port := htons(80); addr.sin_addr := PInAddr(phe.h_addr_list^)^; error := connect(sock, addr, sizeof(addr)); if error = SOCKET_ERROR then begin closesocket(sock); WSACleanup; exit; end; //str := 'GET '+url + ' HTTP/1.0'#13#10#13#10; str:=packet; send(sock, str[1], Length(str), 0); ZeroMemory(@buf, 1024); error := recv(sock, buf, 1024, 0); while error > 0 do begin Result := Result + Copy(buf, 0, error); error := recv(sock, buf, 1024, 0); end; closesocket(sock); WSACleanup; if Result <> '' then Result:=Copy(Result, pos(#13#10#13#10, Result)+4,Length(Result)); end; var answ : string; answ := get( create_packet('http://www.google.com/') ); сохранение в файл: Code: AssignFile(myFile, 'file.txt'); ReWrite(myFile); WriteLn(myFile, answ); CloseFile(myFile); ну и прочитать в listbox стандартно: Code: listbox1.items.loadfromfile('file.txt');
eLWAux, спасибо огромное. =) Есть еще один вопрос, можно ли сделать так чтобы когда копаешься на сайте, выделив определнный элемент (название таблицы) и щелкнув правой кнопой мыхи, появлялось контекстное меню, в котором было бы подменю с названием sql, при нажатии которого данные отправлялись в прогу, переделывались в sql hex и после этого записывались в буфер?
Ну да да да, что бы получить ОДНУ СТРАНИЦУ, мы используем сокеты... показуха какая то... Получаем страницу с помощью TidHTTP и парсим регуляркой... Пользоваться сокетами нужно там где они действительно нужны...
добавляеш IdHTTP из вкладки "Indy Clients". вот тебе два примера: 1) загрузки страници "Антибоян" - "http://constant1ne.by.ru/sqls.html" в listbox с помощью IdHTTP, GET методом (каждий сайт в отдельний item): Code: var i:integer ; begin [u][color=#ccff66]GET метод (для http)[/color][/u] [color=white]// загружаем страницу в listbox[/color] listbox1.Items.Text:= IdHttp1.Get('http://constant1ne.by.ru/sqls.html'); [color=white]// пример проверки сайта по Антибоян'у[/color] if (listbox1.Items.IndexOf('http://numi.is')>0) then showmessage('[боян] http://numi.is') else showmessage('http://numi.is нету в списке Антибоян!'); 2) пример POST метода, для логина на ачат (по https): Code: var i:integer ; IdHandler: TIdSSLIOHandlerSocket; CookMan: TidCookieManager; Params: TStringList; username,password,md5_password:string; begin [u][color=#ccff66]POST метод (для https)[/color][/u] [color=white]// ето нужно для роботи с https[/color] IdHandler:=TIdSSLIOHandlerSocket.Create(nil); IdHandler.SSLOptions.Method:=sslvTLSv1; IdHTTP1.IOHandler:=IdHandler; [color=white]// сookie хранитель[/color] IdHTTP1.AllowCookies:=true; CookMan:=TidCookieManager.Create(idHTTP1); idHttp1.CookieManager := CookMan; username := 'eLWAux'; password := 'твой_пароль'; md5_password := 'или_md5_твоего_пароля'; [color=white]// данние, которие передаютса в POST запросе[/color] Params:=TStringList.Create; Params.add('vb_login_username='+username); Params.add('vb_login_password='+password); Params.add('cookieuser=1'); Params.add('s='); Params.add('do=login'); Params.add('forceredirect=1'); Params.add('vb_login_md5password='+md5_password); try IdHTTP1.Port:=443; [color=white]// https[/color] [color=white]// необязательно - юзер агент[/color] IDHttp1.Request.UserAgent:='Mozila'; [color=white]// рефферер[/color] IdHTTP1.Request.Referer:='https://forum.antichat.ru/index.php?'; [color=white]// а вот и он, POST запрос на login.php )[/color] memo1.Lines.Text:= IdHttp1.Post('http://forum.antichat.ru/login.php?',params); finally IdHTTP1.Free; IdHandler.Free; Params.Free; end; вот и все.. думаю поймеш, как отправлять сообщения на форум.. )
eLWAux, Чтоб я без тебя делал +) Спасибо огроменное =) Как я понял чтобы отправить сообщение нада вот с этим поковыряться? <input type="hidden" name="fromquickreply" value="1" /> <input type="hidden" name="s" value="" /> <input type="hidden" name="do" value="postreply" /> <input type="hidden" name="t" value="21336" id="qr_threadid" /> <input type="hidden" name="p" value="who cares" id="qr_postid" /> <input type="hidden" name="parseurl" value="1" /> <input type="hidden" name="clickedelm" value="" /> <input type="submit" class="button" value="Отправить быстрый ответ" accesskey="s" title="(Alt + S)" name="sbutton" tabindex="2" onclick="this.form.clickedelm.value=this.value" /> <input type="submit" class="button" value="Расширенный режим" accesskey="x" title="(Alt + X)" name="preview" tabindex="3" id="qr_preview" onclick="this.form.clickedelm.value = this.value" /> </div>
да, именно! Code: <form action="[color=white][b]newreply.php[/b][/color]" method="[color=white][b]post[/b][/color]" name="vbform" onsubmit="return checkQR(this);"> <textarea name="[color=white][b]message[/b][/color]" id="qr_message" class="bginput" style="width: 600px; height: 100px;" rows="5" cols="60" tabindex="1"> <input type="hidden" name="[color=white][b]fromquickreply[/b][/color]" value="[color=white][b]1[/b][/color]" /> <input type="hidden" name="[color=white][b]s[/b][/color]" value="" /> <input type="hidden" name="[color=white][b]do[/b][/color]" value="[color=white][b]postreply[/b][/color]" /> <input type="hidden" name="[color=white][b]t[/b][/color]" value="[color=white][b]21336[/b][/color]" id="qr_threadid" /> <input type="hidden" name="[color=white][b]p[/b][/color]" value="[color=white][b]who cares[/b][/color]" id="qr_postid" /> <input type="hidden" name="[color=white][b]parseurl[/b][/color]" value="[color=white][b]1[/b][/color]" /> <input type="hidden" name="[color=white][b]clickedelm[/b][/color]" value="" /> <input type="submit" class="button" value="Отправить быстрый ответ" accesskey="s" title="(Alt + S)" name="[color=white][b]sbutton[/b][/color]" tabindex="2" onclick="this.form.clickedelm.value=this.value" /> <input type="submit" class="button" value="Расширенный режим" accesskey="x" title="(Alt + X)" name="[color=white][b]preview[/b][/color]" tabindex="3" id="qr_preview" onclick="this.form.clickedelm.value = this.value" /> </div> т.е. отправляеш на http(s)://forum.antichat.ru/newreply.php POST методом c параметрами: Code: fromquickreply=1 t=номер_теми message=текст_сообщения s= do=postreply p=who cares parseurl=1 clickedelm=Отправить быстрый ответ sbutton=Отправить быстрый ответ пробуй, експериметируй) а лучше постав себе на локалку воблу, и потестируй)
Спасибо еще раз =) Пошел эксерементировать =)) ____________________________ Вот то что получилось: http://rapidshare.com/files/202418155/Archive22.zip.html Зеркало. http://slil.ru/26998348 Cообщения отправляет, вроде все нормально, но есть проблемы, выдает ошибку после отправки сообщения, и второй раз не дает отправить... eLWAux, посмотри что я не так сделал? И еще раз спасибо. ___________________________ Еще покопался понял что вторя ошибка была из-за IdHTTP1.Free; IdHandler.Free; Params.Free; Отключил // Теперь можно отправлять подряд много сообщений с тайм аутом в 30 сек все как и полжено, но до сих пор не могу понять что это за ошибка... HTTP/1.1 302 Moved Temporarily. _________________________________ УРААААААААААААААААААА. Все работает проблема была в handleredirect нужно было поставить true =))... Ухх скоро уже закончу =)
При переходе по этой ссылке http://bar-navig.yandex.ru/u?ver=2&show=32&url=http://google.ru показывается тиц. В исходном коде <url domain="www.google.ru">/</url> <tcy rang="6" value="76000"/> Как вывести его в программу?
Code: uses ...RegExpr..; var regexp: TRegExpr; .. answ = '<tcy rang="6" value="76000"/>'; RegExp.Expression := '<tcy rang="(\d+)" value="(\d+)"/>'; //регулярка RegExp.Exec(answ); //парсим answ регуляркой rand := RegExp.Substitute('$1'); //получаем первое совпадение value:= RegExp.Substitute('$2');//получаем второе ..