Simple POC
brew install wget
gcc -lcurl download_internet.c
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
#include <curl/curl.h> | |
const char* charset = "abcdefghijklmnopqrstuvwxyz"; | |
char buffer[100]; | |
void permute(int level, const char* domain) { | |
const char* charset_ptr = charset; | |
if(level == -1){ | |
char* url = malloc(sizeof(char) * (strlen(buffer) + strlen(domain) + 2)); | |
sprintf(url, "http://%s.%s", buffer, domain); | |
char* cmd = malloc(sizeof(char) * (strlen(url) + 20)); | |
sprintf(cmd, "wget --timeout 2 -r %s", url); | |
system(cmd); | |
} else { | |
while(buffer[level] =* charset_ptr++) { | |
permute(level - 1, domain); | |
} | |
} | |
} | |
size_t write_data(void *ptr, size_t size, size_t nmemb, FILE *stream) { | |
size_t written = fwrite(ptr, size, nmemb, stream); | |
return written; | |
} | |
int main(int argc, char **argv) | |
{ | |
CURL *curl; | |
char* domain_file_name = "/tmp/domains.txt"; | |
FILE *fp = fopen(domain_file_name, "rw"); | |
CURLcode res; | |
char *url = "https://publicsuffix.org/list/public_suffix_list.dat"; | |
curl = curl_easy_init(); | |
if (curl) { | |
curl_easy_setopt(curl, CURLOPT_URL, url); | |
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); | |
curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); | |
res = curl_easy_perform(curl); | |
curl_easy_cleanup(curl); | |
} | |
char *domain = malloc(sizeof(char) * 100); | |
while(fgets(domain, 100, fp) != NULL) { | |
if (strlen(domain) <= 1 || domain[0] == '/') continue; | |
for (int length = 3; length < 100; length++) { | |
buffer[length] = '\0'; | |
permute(length - 1, domain); | |
} | |
} | |
} |