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); | |
| } | |
| } | |
| } |