Skip to content

Instantly share code, notes, and snippets.

@kopiro
Created June 22, 2018 11:48
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kopiro/e1d5b0e2359da4c54c83fc2251df3a30 to your computer and use it in GitHub Desktop.
Save kopiro/e1d5b0e2359da4c54c83fc2251df3a30 to your computer and use it in GitHub Desktop.
Download entire INTERNET

Internet Downloader

Simple POC

Compilation

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);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment