Bytescanner C Programcilari Icin API Ornegi
-
3 Adimda Dosya Taratma Dokumantasyonu:
http://bytescanner.com/sdk/apidoctr.txt
Gelistiriciler Icin SDK Kök Dizini :
Projenin Tam Kaynak Kodu:
http://bytescanner.com/sdk/BytescannerCAPI.rar
Kaynak Kodu:
/* Author : Ersan YAKIT ersanyakit@yahoo.com.tr http://www.bytescanner.com DEVC++ http://downloads.sourceforge.net/project/dev-cpp/Binaries/Dev-C%2B%2B%204.9.9.2/devcpp-4.9.9.2_setup.exe?r=http%3A%2F%2Fwww.bloodshed.net%2Fdev%2Fdevcpp.html&ts=1378681357&use_mirror=garr CURL http://curl.haxx.se/gknw.net/7.32.0/dist-w32/curl-7.32.0-devel-mingw32.zip Using LIBCURL in DEVC++ http://curl.haxx.se/mail/archive-2005-10/att-0119/DevCpp-Mingw_Install___Compilation_Sept_2005.rtf PROJECT / OPTIONS / PARAMETERS / LINKER C:\Dev-Cpp/lib/libcurl.a C:\Dev-Cpp/lib/libcurldll.a */ #include "main.h" #include "cJSON.h" typedef struct _MemoryStruct { char *memory; size_t size; } MemoryStruct, *LPMemoryStruct; typedef struct _SCAN_FILE { char *email; char *password; char *binaryPath; char *cookiePath; }SCAN_FILE,*LPSCAN_FILE; void *set_memory( size_t n) { void *p=( void *)malloc( n + 1 ); if ( p ) memset(p, 0x00, n+1); return p; } int unset_memory( void *p) { if ( p ) free(p); return 0; } int str_merge( char **buff, char *fmt, ...) { va_list ap; int len, mlen; char *ret = NULL; mlen = strlen(fmt) + 512; va_start(ap, fmt); while(1) { if ( !(ret = (char *) set_memory( mlen ) ) ) return -1; len = vsnprintf(ret, mlen, fmt, ap); if((len >= 0) && (len < mlen)) break; mlen = len < 0 ? mlen+128 : len+1; unset_memory(ret); } va_end(ap); *buff = ret; return len; } size_t Write2Mem( void *contents, size_t size, size_t nmemb, void *userp) { size_t realsize = size * nmemb; MemoryStruct *mem = (MemoryStruct *)userp; mem->memory = realloc(mem->memory, mem->size + realsize + 1); if(mem->memory == NULL) { /* out of memory! */ printf("not enough memory (realloc returned NULL)\n"); return 0; } memcpy(&(mem->memory[mem->size]), contents, realsize); mem->size += realsize; mem->memory[mem->size] = 0; return realsize; } /* START*/ int print_exit( const char *strMsg ) { fprintf(stderr, "%s", strMsg); exit(-1); } int _SetAuthParameters(char *out, const SCAN_FILE *s ) { return str_merge( &out, "action=Auth&email=%s&password=%s", s->email, s->password ); } int _checkSuccess(const char * data) { char *out; cJSON *item; item=cJSON_Parse(data); cJSON *subitem=cJSON_GetArrayItem(item,0); if(strstr(subitem->string,"success")){ return subitem->valueint; } } int getScanID(const char * data) { char *out; cJSON *item; item=cJSON_Parse(data); cJSON *subitem=cJSON_GetArrayItem(item,1); if(strstr(subitem->string,"root")){ return subitem->valueint; } } int main(int argc, char **argv ) { CURL *curl; CURLcode res; SCAN_FILE *scan=NULL; char *postData=NULL; MemoryStruct chunk; struct curl_httppost *formpost=NULL; struct curl_httppost *lastptr=NULL; struct curl_slist *headerlist=NULL; static const char buf[] = "Expect:"; chunk.memory = malloc(1); chunk.size = 0; scan=set_memory( sizeof(SCAN_FILE)+1); if ( scan == NULL ) { fprintf( stderr, "[x] No enough memory!"); exit(-1); } str_merge( &scan->email, "demo@bytescanner.com"); // your email str_merge( &scan->password, "yourpassword"); // your email str_merge( &scan->binaryPath, "D:\\curlLibDerleme.txt"); str_merge( &scan->cookiePath, "%s.%s", __FILE__, "tmp"); if ( DEBUG ) fprintf(stderr, "user: %s\npass: %s\nfile: %s\nCookie: %s\n", scan->email, scan->password, scan->binaryPath, scan->cookiePath); if ( str_merge( &postData, "action=Auth&email=%s&password=%s", scan->email,scan->password) == -1 ) { fprintf(stderr, "[X] Auth information set Failed!"); exit(-1); } fprintf(stderr, "AuthData: %s", postData); curl_global_init(CURL_GLOBAL_ALL); curl = curl_easy_init(); if(!curl) { print_exit("[X] unable to start curl library!\n"); exit(-1); } curl_easy_setopt(curl, CURLOPT_URL, BYTESCANNER_AUTH_URL); curl_easy_setopt(curl, CURLOPT_POSTFIELDS, postData ); curl_easy_setopt(curl, CURLOPT_COOKIEFILE, scan->cookiePath ); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, Write2Mem ); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); char *out; cJSON *item; cJSON *subitem; int isLoginOk; isLoginOk=_checkSuccess(chunk.memory); item=cJSON_Parse(chunk.memory); out=cJSON_Print(item); printf("\n\nSTEP I:\n\n%s\n\n",out); if(isLoginOk==0) return; chunk.memory = malloc(1); chunk.size = 0; curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "action", CURLFORM_COPYCONTENTS, "BinaryFileTransfer", CURLFORM_END); curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "binaryFile", CURLFORM_FILE, scan->binaryPath, CURLFORM_END); //curl_formadd(&formpost, &lastptr, CURLFORM_COPYNAME, "submit", CURLFORM_COPYCONTENTS, "send", CURLFORM_END); headerlist = curl_slist_append(headerlist, buf); /* what URL that receives this POST */ curl_easy_setopt(curl, CURLOPT_URL, BYTESCANNER_SCAN_URL); if ( (argc == 2) && (!strcmp(argv[1], "noexpectheader")) ) { /* only disable 100-continue header if explicitly requested */ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headerlist); } curl_easy_setopt(curl, CURLOPT_HTTPPOST, formpost); res = curl_easy_perform(curl); if(res != CURLE_OK) { fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); } int isUploadOK; int currentScanID; item=cJSON_Parse(chunk.memory); out=cJSON_Print(item); printf("STEP II:\n\n%s\n\n",out); isUploadOK=_checkSuccess(chunk.memory); if(isUploadOK==0) return; currentScanID=getScanID(chunk.memory); chunk.memory = malloc(1); chunk.size = 0; printf("\n\nCURRENT SCN ID: %d",currentScanID); printf("\n\nSTEP III:\n\n"); char * ScanResultURL = NULL; str_merge(&ScanResultURL,"%s?action=scanResult&ResultID=%d",BYTESCANNER_QUERY_URL,currentScanID); curl_easy_setopt(curl, CURLOPT_URL, ScanResultURL); res = curl_easy_perform(curl); item=cJSON_Parse(chunk.memory); out=cJSON_Print(item); item=cJSON_GetArrayItem(item,1); // root child = 1, success = 0, error=2 out=cJSON_Print(item); char * AnvirusProvider=NULL; char * LastUpdate=NULL; char * ScanTime = NULL; char * ScanResult= NULL; int i; for (i=0;i<cJSON_GetArraySize(item);i++) { subitem=cJSON_GetArrayItem(item,i); AnvirusProvider = cJSON_GetObjectItem(subitem,"malwareScanProvider")->valuestring; LastUpdate = cJSON_GetObjectItem(subitem,"malwareScanProviderVer")->valuestring; ScanTime = cJSON_GetObjectItem(subitem,"malwareScanProviderResultTime")->valuestring; ScanResult = cJSON_GetObjectItem(subitem,"malwareScanProviderResult")->valuestring; printf("%d %s %s %s %s \r\n",i,AnvirusProvider,LastUpdate,ScanTime,ScanResult); } getch(); curl_easy_cleanup(curl); curl_global_cleanup(); return 0; }
-
Linux ortaminda derlemek icin;
gcc main.c cJSON.c -lcurl -lm

-
Çok güzel görünüyor c'ye dönüş yapıcam galiba :)
Hocam bu arada hangi distro o kullandığın linux ?
-
SinusX bunu yazdı
Çok güzel görünüyor c'ye dönüş yapıcam galiba :)
Hocam bu arada hangi distro o kullandığın linux ?
tesekkurler, arch linux
Toplam Hit: 2798 Toplam Mesaj: 4
