ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
Чекалка доменов на Builder |

26.05.2010, 20:23
|
|
Участник форума
Регистрация: 11.09.2008
Сообщений: 107
Провел на форуме: 262809
Репутация:
21
|
|
Чекалка доменов на Builder
Суть простая тулза которая отчекивает заданный список доменов по ключевому слову. Я пока только разбираюсь в Builder так что сильно не пинайте, использую в проекте libcurl и многопоточность с помощью TTreads, проблема в том что приложение работает не совсем корректно, заносит в файлы good.txt и bad.txt не понятно каким образом ниже приведу код буду благодарен тем кто сможет помочь в отлове ошибки.
Код:
#include <vcl.h>
#pragma hdrstop
#include "Unit3.h"
#include <Unit1.h>
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
int max;
int count=0;
FILE* f1;
FILE* f2;
TStringList *DomainList = new TStringList;
static size_t Writer(char *data, size_t size,
size_t nmemb, AnsiString *buffer)
{
size_t result = 0;
if(buffer != NULL)
{
buffer->Insert(data,buffer->Length()+1);
//заполняем переменную buffer
result = size * nmemb;
// формируем значение количества переданных
//байт данных
}
return result;
}
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
__fastcall Thread::Thread(bool CreateSuspended)
: TThread(CreateSuspended)
{
}
void __fastcall Thread::Execute()
{
HINSTANCE cl = NULL;
if( ( cl = LoadLibrary( "libcurl.dll" ) ) == NULL )
MessageBox(NULL, "I can't load libcurl","ERROR", 0);
TStringList *tfile = new TStringList;
bool check=true;
FreeOnTerminate= true;
String data,url,filename;
EnterCriticalSection(&Form3->CS);
CURL *curl;
curl = curl_easy_init();
while(check){
if(count<max){
data="";
url="";
url= DomainList->Strings[count];
count++;
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION,Writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA,&data);
curl_easy_setopt(curl, CURLOPT_URL,url);
curl_easy_setopt(curl, CURLOPT_HEADER , 1 );
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2);
curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, false);
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1);
curl_easy_perform(curl);
LeaveCriticalSection(&Form3->CS);
//curl_easy_cleanup(curl);
tfile->Add(data);
filename= IntToStr(count)+".txt";
tfile->SaveToFile(filename);
tfile->Clear();
data.LowerCase();
Form3->Label1->Caption = url;//DomainList->Strings[count];
if(data.Pos("under construction")<0){
f1= fopen("good.txt","a+");
fputs(DomainList->Strings[count].c_str(),f1);
fputs("\n",f1);
fclose(f1);
}else{
f2= fopen("bad.txt","a+");
fputs(DomainList->Strings[count].c_str(),f2);
fputs("\n",f2);
fclose(f2);
}
}else{
FreeLibrary(cl);
check = false;
Terminate();
}
}
}
void __fastcall TForm3::Button1Click(TObject *Sender)
{
DomainList->LoadFromFile("domains.txt");
max= DomainList->Count-1;
InitializeCriticalSection(&CS);
Thread *T[3];
for(int i=0;i<3;i++){
T[i] = new Thread(false);
}
}
|
|
|

29.05.2010, 10:07
|
|
Постоянный
Регистрация: 29.10.2008
Сообщений: 306
Провел на форуме: 1819761
Репутация:
180
|
|
Крит.секция используется там, где не нужно. Нет смысла делать несколько потоков, если работа с сетью в крит.секции.
И наоборот, там где нужна синхронизация, ее нет.
|
|
|
|
 |
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|