MAC vendor lookup: Difference between revisions
Content deleted Content added
Added C implementation. |
|||
Line 19: | Line 19: | ||
Outputs:<pre>Dell Inc.</pre> |
Outputs:<pre>Dell Inc.</pre> |
||
=={{header|C}}== |
|||
Takes MAC address as input, prints usage on incorrect invocation, requires [https://curl.haxx.se/libcurl/ libcurl] |
|||
<lang C> |
|||
/*Abhishek Ghosh, 18th October 2017*/ |
|||
#include <curl/curl.h> |
|||
#include <string.h> |
|||
#include <stdlib.h> |
|||
#include <stdio.h> |
|||
/* Length of http://api.macvendors.com/ */ |
|||
#define FIXED_LENGTH 16 |
|||
struct MemoryStruct { |
|||
char *memory; |
|||
size_t size; |
|||
}; |
|||
static size_t WriteMemoryCallback(void *contents, size_t size, size_t nmemb, void *userp) |
|||
{ |
|||
size_t realsize = size * nmemb; |
|||
struct MemoryStruct *mem = (struct MemoryStruct *)userp; |
|||
mem->memory = realloc(mem->memory, mem->size + realsize + 1); |
|||
memcpy(&(mem->memory[mem->size]), contents, realsize); |
|||
mem->size += realsize; |
|||
mem->memory[mem->size] = 0; |
|||
return realsize; |
|||
} |
|||
void checkResponse(char* str){ |
|||
char ref[] = "Vendor not found"; |
|||
int len = strlen(str),flag = 1,i; |
|||
if(len<16) |
|||
fputs(str,stdout); |
|||
else{ |
|||
for(i=0;i<len && i<16;i++) |
|||
flag = flag && (ref[i]==str[i]); |
|||
flag==1?fputs("N/A",stdout):fputs(str,stdout); |
|||
} |
|||
} |
|||
int main(int argC,char* argV[]) |
|||
{ |
|||
if(argC!=2) |
|||
printf("Usage : %s <MAC address>",argV[0]); |
|||
else{ |
|||
CURL *curl; |
|||
int len = strlen(argV[1]); |
|||
char* str = (char*)malloc((FIXED_LENGTH + len)*sizeof(char)); |
|||
struct MemoryStruct chunk; |
|||
CURLcode res; |
|||
chunk.memory = malloc(1); |
|||
chunk.size = 0; |
|||
if ((curl = curl_easy_init()) != NULL) { |
|||
sprintf(str,"http://api.macvendors.com/%s",argV[1]); |
|||
curl_easy_setopt(curl, CURLOPT_URL, str); |
|||
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteMemoryCallback); |
|||
curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&chunk); |
|||
free(str); |
|||
res = curl_easy_perform(curl); |
|||
if (res == CURLE_OK) { |
|||
checkResponse(chunk.memory); |
|||
return EXIT_SUCCESS; |
|||
} |
|||
curl_easy_cleanup(curl); |
|||
} |
|||
} |
|||
return EXIT_FAILURE; |
|||
} |
|||
</lang> |
|||
Invocation and output : |
|||
<pre> |
|||
C:\rosettaCode>macLookUp 00-11-22-33-44-55-66 |
|||
CIMSYS Inc |
|||
C:\rosettaCode>macLookUp 10-11-22-33-44-55-66 |
|||
N/A |
|||
</pre> |
|||
=={{header|C sharp|C#}}== |
=={{header|C sharp|C#}}== |
||