|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах |
|
C/C++ - Получение контрольных сумм файлов (MD5, и т.д.) и их проверка в Online-сервисах
|
Будем жить, Маэстро... Сообщения: 6694 |
Приветы.
![]() 1. Как получить контрольную сумму (MD5) файла - Решена 2. Как сделать запрос на онлайн-сервис (http://www.virustotal.com/search.html) 3. Как вернуть результат проверки Спасибо. |
|
------- Отправлено: 17:30, 17-08-2010 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, Я ещё не учёл такой момент, это кстати не учтено и в VT Checker - утилита пакетной проверки файлов на VirusTotal.com, когда соединения с Инетом нет, то моя программа выдаёт ошибку, а VT Checker молча закрывается.
Как можно добавить код, чтобы проверялось наличие установленого соединения и если его небудет, то выдавало один MessageBox с сообщением Цитата:
|
|
------- Отправлено: 14:07, 29-08-2010 | #41 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать #include <stdio.h> #include <wininet.h> bool CheckConnection() { DWORD flags; flags = INTERNET_CONNECTION_MODEM + INTERNET_CONNECTION_LAN + INTERNET_CONNECTION_PROXY; return InternetGetConnectedState (&flags,0); } if(!CheckConnection()) { MessageBox(0, "Отсутствует соединение с интереном", "Внимание", MB_OK + MB_ICONWARNING); } |
------- Отправлено: 14:51, 29-08-2010 | #42 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, Я знаю, что что-то не так делаю, но что именно, понять не могу, посмотрите проект. (3 КБ)
|
------- Отправлено: 19:15, 29-08-2010 | #43 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 20:15, 29-08-2010 | #44 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, Да, с этим скомпилировалось без ошибок. Но в любом случае, хоть есть подключение, хоть его нету, функция показывает сообщение - Инет работает.
![]() |
------- Отправлено: 12:32, 30-08-2010 | #45 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Почитал про эту функцию в инете, пишут, что не у всех работает.
Тогда можно попробовать так: try{ HTTPQuery->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdSocketError &se){ //если не удалось подключится, то возникнет это исключение if(se.LastError == код ошибки, когда пытаемся коннектится с отсутствующим инетом) MessageBox(0, "Не удалось подключится к удалённому серверу", 0, MB_OK + MB_ICONWARNING); // ShowMessage(se.Message); } catch(Exception &e){ ShowMessage(e.Message); } |
------- Отправлено: 13:10, 30-08-2010 | #46 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, Искал в Нете решение, набрёл на похожее, только на делфи. Пробовал сам, но запутался с catch. Сейчас проверю.
![]() var connected: boolean; begin connected:=true; //тут прописываем настройки idHTTP try idHTTP.Get('http://www.google.ru'); //в OnStatus можно прописать дисконнект на статусе "Connected", что б лишнего не качать except on e: exception do connected := false; end; if not connected then ShowMessage('Нет инета') else ShowMessage('Есть инет'); end; #include <stdio.h> #include <winsock2.h> #include <windows.h> #define ADDR "209.85.229.104" #define PORT 80 #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaDATA; SOCKET my_socket; sockaddr_in server_addr; int len_client_sock; printf("Scanner address: %s!\n", ADDR); if(WSAStartup(MAKEWORD(2,2), &wsaDATA) != NO_ERROR){ printf("Library WinSock not load!\n"); WSACleanup(); system("PAUSE"); return 1; } else printf("Library WinSock load!"); my_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); server_addr.sin_family = AF_INET; server_addr.sin_addr.s_addr = inet_addr(ADDR); server_addr.sin_port = htons(PORT); len_client_sock = sizeof(server_addr); if(connect(my_socket, (sockaddr*)&server_addr, len_client_sock) != SOCKET_ERROR) printf("\nInternet YES!\n"); else printf("\nInternet NO!\n"); shutdown(my_socket, SD_BOTH); closesocket(my_socket); WSACleanup(); system("PAUSE"); return 0; } |
------- Отправлено: 14:57, 30-08-2010 | #47 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать catch(EIdSocketError &se){ if(se.LastError == 11004) MessageBox(0, "Соединение не обнаружено", 0, 0); } var connected: boolean; begin connected:=true; //тут прописываем настройки idHTTP try idHTTP.Get('http://www.google.ru'); //в OnStatus можно прописать дисконнект на статусе "Connected", что б лишнего не качать except on e: exception do connected := false; end; if not connected then ShowMessage('Нет инета') else ShowMessage('Есть инет'); end; |
------- Отправлено: 15:33, 30-08-2010 | #48 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать ganselo, я придумал так, как вы показали и как есть на дельфи в коде выше. ![]() // Инициализируем массив вне отдельного потока----------- void __fastcall TForm1::FormCreate(TObject *Sender) { lHash = new TStringList; lHash->Add("564dfacf47f4d215b76a5eb3770a83d4"); lHash->Add("0045BCBD3047391E47F3B56DC7C7F2F2"); lHash->Add("00636A27AF20104CC13E8DDE7DEE64E7"); lHash->Add("012995DAD105ACEFBF05591271CD2F54"); } //добавляем новую функцию. Здесь и будет обращение к серверу DWORD WINAPI QueryThread(LPVOID lpParam) { TStringList *post = new TStringList; TStringStream *response = new TStringStream(""); TStringList *lHash = (TStringList *)lpParam; for(int i = 0; i < lHash->Count; i++){ post->Clear(); post->Add("chain=" + lHash->Strings[i]); try{ Form1->HTTPQuery->Post("http://www.virustotal.com/search.html", post, response); } catch(EIdHTTPProtocolException &se){ switch(se.ErrorCode){ case 200: //всё ок break; case 303: break; //редирект case 404: //404 not found break; default: break; } } catch(EIdSocketError &se){ MessageBox(0, se.Message.c_str(), 0, 0); } Form1->HTTPQuery->Disconnect(); } delete post, response, lHash; } // Выполнение и обработка------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { bool connect = true; // Добавил переменную bool try{ HTTPQuery->Get("http://www.virustotal.com/search.html"); } catch(EIdHTTPProtocolException &se){ switch(se.ErrorCode){ case 200: //всё ок break; case 303: break; //редирект case 404: //404 not found break; default: break; } } catch(EIdSocketError &se){ //если не удалось подключится, то возникнет это исключение // и bool присваивается false if(se.LastError == 11001) connect = false; } if(connect){ // Если соединение есть - connect == true, начинаем обработку HANDLE hThread; hThread = CreateThread(0, 0, QueryThread, lHash, 0, 0); if(hThread == INVALID_HANDLE_VALUE){ ShowMessage("Can't create thread"); return; } CloseHandle(hThread); } else // Если соединения нету - connect == false MessageBox(0, "Не удалось подключится к удалённому серверу", 0, MB_OK + MB_ICONWARNING); } //--------------------------------------------------------------------------- ![]() ![]() Цитата ganselo:
|
|
------- Отправлено: 15:33, 30-08-2010 | #49 |
![]() Старожил Сообщения: 232
|
Профиль | Сайт | Отправить PM | Цитировать Можно было обойтись без лишних проверок, а сделать так:
void __fastcall TForm1::Button1Click(TObject *Sender) { try{ HTTPQuery->Get("http://www.virustotal.com/search.html"); HANDLE hThread; hThread = CreateThread(0, 0, QueryThread, lHash, 0, 0); if(hThread == INVALID_HANDLE_VALUE){ ShowMessage("Can't create thread"); return; } CloseHandle(hThread); } catch(EIdHTTPProtocolException &se){ switch(se.ErrorCode){ case 200: //всё ок break; case 303: break; //редирект case 404: //404 not found break; default: break; } } catch(EIdSocketError &se){ if(se.LastError == 11001) MessageBox(0, "Не удалось подключится к удалённому серверу", 0, MB_OK + MB_ICONWARNING); } } |
------- Отправлено: 18:39, 30-08-2010 | #50 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Info - Онлайн проверка всего компьютера и отдельных файлов на вирусы | iskander-k | Защита компьютерных систем | 6 | 27-01-2013 22:30 | |
Прочие - Программы для подсчёта контрольных сумм файлов | ALEXEY_DFD | Программное обеспечение Windows | 14 | 18-11-2011 15:30 | |
CMD/BAT - [решено] Проверка установки определенных файлов в директорию | korenza | Скриптовые языки администрирования Windows | 17 | 03-06-2010 13:25 | |
Проверка защищенных файлов | SergOst | Microsoft Windows NT/2000/2003 | 11 | 15-10-2006 18:07 | |
Проверка новых файлов налету, чем? | sash minsk | Защита компьютерных систем | 5 | 03-06-2005 16:46 |
|