├── Breacher.cpp ├── CloudflareBypass.cpp ├── FindPerson.cpp ├── GenerateIP.cpp ├── HttpGet.c ├── HttpPost.c ├── Makefile ├── README.md ├── lib ├── includes.h └── termcolor.hpp ├── main.cpp ├── modules ├── Breacher.h ├── CloudflareBypass.h ├── FindPerson.h ├── GenerateIP.h ├── HttpGet.h └── HttpPost.h ├── pwd ├── path.txt └── sub.txt ├── run.sh └── src ├── clearCurl.c ├── clearCurl.h ├── netCurl.cpp └── netCurl.h /Breacher.cpp: -------------------------------------------------------------------------------- 1 | #include "modules/Breacher.h" 2 | #include "lib/includes.h" 3 | #include "lib/termcolor.hpp" 4 | #include "src/netCurl.h" 5 | 6 | using namespace termcolor; 7 | 8 | void Breacher::openFile(std::string path) 9 | { 10 | std::ifstream myfile (path); // Открытие файла 11 | if (myfile.is_open()){ 12 | while (!myfile.eof() ) 13 | { 14 | getline (myfile,line); // Считывание строки 15 | array[loop] = line; // Запись её в массив 16 | loop++; 17 | } 18 | myfile.close(); 19 | } 20 | } 21 | 22 | void Breacher::setDomian(std::string domian) 23 | { 24 | this->domian = domian; 25 | } 26 | 27 | void Breacher::setSec(std::string Secure) 28 | { 29 | this->Secure = Secure + "://"; 30 | } 31 | 32 | void Breacher::mainMenu() 33 | { 34 | for (int a = 0; a < loop; a++) { 35 | switch (ResponseCode(Secure + domian + array[a])) { 36 | case 404: 37 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "404 Not Found\n" << reset; 38 | break; 39 | case 403: 40 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "403 Forbidden\n" << reset; 41 | break; 42 | case 500: 43 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "500 Internet Server Error\n" << reset; 44 | break; 45 | case 502: 46 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "502 Bad Gateway\n" << reset; 47 | break; 48 | case 503: 49 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "503 Service Unavailable\n" << reset; 50 | break; 51 | case 504: 52 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "504 Gateway Timeout\n" << reset; 53 | break; 54 | case 301: 55 | std::cout << bold << yellow << " [/] " << reset << Secure + domian + array[a] << bold << blue << " | " << yellow << "301 Moved Permanently\n" << reset; 56 | break; 57 | case 200: 58 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "200 OK\n" << reset; 59 | break; 60 | case 201: 61 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "201 Created\n" << reset; 62 | break; 63 | case 202: 64 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "202 Accepted\n" << reset; 65 | break; 66 | case 203: 67 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "203 Non-Authoritative Information\n" << reset; 68 | break; 69 | case 204: 70 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "204 No Content\n" << reset; 71 | break; 72 | case 206: 73 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "206 Partial Content\n" << reset; 74 | break; 75 | case 304: 76 | std::cout << bold << red << " [-] " << reset << Secure + domian + array[a] << bold << blue << " | " << red << "304 Not Modified\n" << reset; 77 | break; 78 | case 302: 79 | std::cout << bold << green << " [/] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "302 Found\n" << reset; 80 | break; 81 | case 205: 82 | std::cout << bold << green << " [+] " << reset << Secure + domian + array[a] << bold << blue << " | " << green << "205 Reset Content\n" << reset; 83 | break; 84 | default: 85 | std::cout << bold << yellow << " [/] " << reset << Secure + domian + array[a] << bold << blue << " | " << yellow << "Code Not Found\n" << reset; 86 | break; 87 | 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /CloudflareBypass.cpp: -------------------------------------------------------------------------------- 1 | #include "lib/includes.h" 2 | #include "modules/CloudflareBypass.h" 3 | #include "lib/termcolor.hpp" 4 | #include "src/netCurl.h" 5 | 6 | using namespace termcolor; 7 | 8 | void CloudflareBypass::openFile(std::string path){ 9 | std::ifstream myfile (path); // Открытие файла 10 | if (myfile.is_open()){ 11 | while (!myfile.eof() ) 12 | { 13 | getline (myfile,line); // Считывание строки 14 | array[loop] = line; // Запись её в массив 15 | loop++; 16 | } 17 | myfile.close(); 18 | } 19 | } 20 | 21 | void CloudflareBypass::setDomian(std::string domian){ 22 | this->domian = domian; 23 | } 24 | 25 | void CloudflareBypass::setSec(std::string Secure){ 26 | this->Secure = Secure + "://"; 27 | } 28 | 29 | void CloudflareBypass::mainMenu(){ 30 | for (int i = 0; i < loop; i++){ 31 | result = array[i] + "." + domian; 32 | switch (ResponseCode(Secure + result)) { 33 | case 404: 34 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "404 Not Found\n" << reset; 35 | break; 36 | case 403: 37 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "403 Forbidden\n" << reset; 38 | break; 39 | case 500: 40 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "500 Internet Server Error\n" << reset; 41 | break; 42 | case 502: 43 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "502 Bad Gateway\n" << reset; 44 | break; 45 | case 503: 46 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "503 Service Unavailable\n" << reset; 47 | break; 48 | case 504: 49 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "504 Gateway Timeout\n" << reset; 50 | break; 51 | case 301: 52 | std::cout << bold << yellow << " [/] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << yellow << "301 Moved Permanently\n" << reset; 53 | break; 54 | case 200: 55 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "200 OK\n" << reset; 56 | break; 57 | case 201: 58 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "201 Created\n" << reset; 59 | break; 60 | case 202: 61 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "202 Accepted\n" << reset; 62 | break; 63 | case 203: 64 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "203 Non-Authoritative Information\n" << reset; 65 | break; 66 | case 204: 67 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "204 No Content\n" << reset; 68 | break; 69 | case 206: 70 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "206 Partial Content\n" << reset; 71 | break; 72 | case 304: 73 | std::cout << bold << red << " [-] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << red << "304 Not Modified\n" << reset; 74 | break; 75 | case 302: 76 | std::cout << bold << green << " [/] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "302 Found\n" << reset; 77 | break; 78 | case 205: 79 | std::cout << bold << green << " [+] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << green << "205 Reset Content\n" << reset; 80 | break; 81 | default: 82 | std::cout << bold << yellow << " [/] " << reset << Secure + result << " | " << GetIP(Secure + result) << bold << blue << " | " << yellow << "Code Not Found\n" << reset; 83 | break; 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /FindPerson.cpp: -------------------------------------------------------------------------------- 1 | #include "modules/FindPerson.h" 2 | #include "src/netCurl.h" 3 | #include "lib/includes.h" 4 | #include "lib/termcolor.hpp" 5 | 6 | using namespace termcolor; 7 | 8 | void FindPerson::mainMenu(std::string name) 9 | { 10 | for (int i = 0; i < 5; i++) { 11 | long code = ResponseCode(services[i] + name); 12 | if (code == 404) { 13 | std::cout << bold << red << " [-] " << reset << services[i] << bold << blue << " | " << red << "N/A" << std::endl; 14 | } 15 | else { 16 | std::cout << bold << green << " [+] " << reset << services[i] << bold << blue << " | " << green<< "Success!" << std::endl; 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /GenerateIP.cpp: -------------------------------------------------------------------------------- 1 | #include "modules/GenerateIP.h" 2 | #include "lib/includes.h" 3 | std::string GenerateIP::generateIP4() 4 | { 5 | int num1 = rand() % 255; 6 | int num2 = rand() % 255; 7 | int num3 = rand() % 255; 8 | int num4 = rand() % 255; 9 | result = std::to_string(num1) + "." + std::to_string(num2) + "." + std::to_string(num3) + "." + std::to_string(num4); 10 | std::cout << " " + result << std::endl; 11 | return result; 12 | } 13 | 14 | void GenerateIP::mainMenu(std::string count) 15 | { 16 | srand(time(0)); 17 | int countConvert = stoi(count); 18 | for (int i = 0; i < countConvert; i++) { 19 | generateIP4(); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /HttpGet.c: -------------------------------------------------------------------------------- 1 | #include "modules/HttpGet.h" 2 | #include 3 | #include "curl/curl.h" 4 | #include "src/clearCurl.h" 5 | 6 | void mainMenuHttpGet(char* domain) { 7 | CURL *curl; 8 | CURLcode res; 9 | curl = curl_easy_init(); 10 | if(curl) { 11 | curl_easy_setopt(curl, CURLOPT_URL, domain); 12 | curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ClearWrite); 13 | curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); 14 | res = curl_easy_perform(curl); 15 | if(res != CURLE_OK) 16 | printf(" \033[1;91m[-]\033[0;39m %s\033[1;94m |\033[0;39m\033[1;91m Failed\n\033[0;39m",domain); 17 | else { 18 | printf(" \033[1;92m[+]\033[0;39m %s\033[1;94m |\033[0;39m\033[1;92m Success!\n",domain); 19 | } 20 | curl_easy_cleanup(curl); 21 | } 22 | 23 | } 24 | 25 | -------------------------------------------------------------------------------- /HttpPost.c: -------------------------------------------------------------------------------- 1 | #include 2 | #include "curl/curl.h" 3 | #include "modules/HttpPost.h" 4 | #include 5 | void mainMenuHttpPost(char* domain, const char* MESSAGE) { 6 | CURL *curl; 7 | CURLcode res; 8 | curl = curl_easy_init(); 9 | if(curl) { 10 | curl_easy_setopt(curl, CURLOPT_URL, domain); 11 | curl_easy_setopt(curl, CURLOPT_POSTFIELDS, MESSAGE); 12 | curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(MESSAGE)); 13 | res = curl_easy_perform(curl); 14 | if(res != CURLE_OK) 15 | printf(" \033[1;91m[-]\033[0;39m %s\033[1;94m |\033[0;39m\033[1;91m Failed\n\033[0;39m",domain); 16 | else { 17 | printf(" \033[1;92m[+]\033[0;39m %s\033[1;94m |\033[0;39m\033[1;92m Success!\n",domain); 18 | } 19 | curl_easy_cleanup(curl); 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | all: 2 | g++ -c main.cpp 3 | gcc -lcurl -c src/clearCurl.c 4 | g++ -c -lcurl src/netCurl.cpp 5 | g++ -c -lcurl Breacher.cpp 6 | g++ -c -lcurl CloudflareBypass.cpp 7 | g++ -c -lcurl GenerateIP.cpp 8 | g++ -c -lcurl FindPerson.cpp 9 | gcc -lcurl -c HttpGet.c 10 | gcc -lcurl -c HttpPost.c 11 | g++ -lcurl -o HackTool main.o netCurl.o Breacher.o CloudflareBypass.o GenerateIP.o FindPerson.o HttpGet.o HttpPost.o clearCurl.o 12 | rm main.o 13 | rm netCurl.o 14 | rm Breacher.o 15 | rm CloudflareBypass.o 16 | rm GenerateIP.o 17 | rm FindPerson.o 18 | rm HttpGet.o 19 | rm clearCurl.o 20 | rm HttpPost.o 21 | clear -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Closed (check profile new soft) 2 | 3 | CloudFlare bypass, Breacher, FindPerson, GeneratorIP 4 | 5 | Dependencies: **libcurl** 6 | 7 | ## Document 8 | ``` 9 | HackWebTool - by lomaster | OldTeam 10 | 11 | CouldFlare bypass: 12 | Usage: ./HackTool [-C] [-f path_file] [-P protocol] [-D domain] 13 | Breacher: 14 | Usage: ./HackTool [-B] [-f path_file] [-P protocol] [-D domain] 15 | FindPerson: 16 | Usage: ./HackTool [-FP] [-n, --name] 17 | GeneratorIP4: 18 | Usage: ./HackTool [-GI4] [--count] 19 | HttpGet: 20 | Usage: ./HackTool [-HTTPg] [-D domain] 21 | HttpPost: 22 | Usage: ./HackTool [-HTTPp] [-D domain message] 23 | 24 | optional arguments: 25 | -h, --help show this help message 26 | ``` 27 | ## Examples 28 | ``` 29 | CouldFlare bypass: ./HackTool -C -f pwd/sub.txt -P https -D google.com 30 | 31 | Breacher: ./HackTool -B -f pwd/path.txt -P https -D google.com 32 | 33 | FindPerson: ./HackTool -FP -n lomaster 34 | 35 | GeneratorIP4: ./HackTool -GI4 --count 10 36 | 37 | HttpGet: ./HackTool -HTTPg -D google.com 38 | 39 | HttpPost: ./HackTool -HTTPp -D google.com Hi_google 40 | ``` 41 | 42 | ## Linux 43 | ``` 44 | $ git clone https://github.com/Lomasterrrr/HackWebTool.git 45 | $ cd HackWebTool-main 46 | $ chmod +x run.sh 47 | $ ./run.sh 48 | ``` 49 | -------------------------------------------------------------------------------- /lib/includes.h: -------------------------------------------------------------------------------- 1 | #include 2 | #include -------------------------------------------------------------------------------- /lib/termcolor.hpp: -------------------------------------------------------------------------------- 1 | //! 2 | //! termcolor 3 | //! ~~~~~~~~~ 4 | //! 5 | //! termcolor is a header-only c++ library for printing colored messages 6 | //! to the terminal. Written just for fun with a help of the Force. 7 | //! 8 | //! :copyright: (c) 2013 by Ihor Kalnytskyi 9 | //! :license: BSD, see LICENSE for details 10 | //! 11 | 12 | #ifndef TERMCOLOR_HPP_ 13 | #define TERMCOLOR_HPP_ 14 | 15 | #include 16 | 17 | // Detect target's platform and set some macros in order to wrap platform 18 | // specific code this library depends on. 19 | #if defined(_WIN32) || defined(_WIN64) 20 | # define TERMCOLOR_TARGET_WINDOWS 21 | #elif defined(__unix__) || defined(__unix) || (defined(__APPLE__) && defined(__MACH__)) 22 | # define TERMCOLOR_TARGET_POSIX 23 | #endif 24 | 25 | // If implementation has not been explicitly set, try to choose one based on 26 | // target platform. 27 | #if !defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) && !defined(TERMCOLOR_USE_WINDOWS_API) && !defined(TERMCOLOR_USE_NOOP) 28 | # if defined(TERMCOLOR_TARGET_POSIX) 29 | # define TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES 30 | # define TERMCOLOR_AUTODETECTED_IMPLEMENTATION 31 | # elif defined(TERMCOLOR_TARGET_WINDOWS) 32 | # define TERMCOLOR_USE_WINDOWS_API 33 | # define TERMCOLOR_AUTODETECTED_IMPLEMENTATION 34 | # endif 35 | #endif 36 | 37 | // These headers provide isatty()/fileno() functions, which are used for 38 | // testing whether a standard stream refers to the terminal. 39 | #if defined(TERMCOLOR_TARGET_POSIX) 40 | # include 41 | #elif defined(TERMCOLOR_TARGET_WINDOWS) 42 | # include 43 | # include 44 | #endif 45 | 46 | 47 | namespace termcolor 48 | { 49 | // Forward declaration of the `_internal` namespace. 50 | // All comments are below. 51 | namespace _internal 52 | { 53 | inline int colorize_index(); 54 | inline FILE* get_standard_stream(const std::ostream& stream); 55 | inline FILE* get_standard_stream(const std::wostream& stream); 56 | template 57 | bool is_colorized(std::basic_ostream& stream); 58 | template 59 | bool is_atty(const std::basic_ostream& stream); 60 | 61 | #if defined(TERMCOLOR_TARGET_WINDOWS) 62 | template 63 | void win_change_attributes(std::basic_ostream& stream, int foreground, int background = -1); 64 | #endif 65 | } 66 | 67 | template 68 | std::basic_ostream& colorize(std::basic_ostream& stream) 69 | { 70 | stream.iword(_internal::colorize_index()) = 1L; 71 | return stream; 72 | } 73 | 74 | template 75 | std::basic_ostream& nocolorize(std::basic_ostream& stream) 76 | { 77 | stream.iword(_internal::colorize_index()) = 0L; 78 | return stream; 79 | } 80 | 81 | template 82 | std::basic_ostream& reset(std::basic_ostream& stream) 83 | { 84 | if (_internal::is_colorized(stream)) 85 | { 86 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 87 | stream << "\033[00m"; 88 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 89 | _internal::win_change_attributes(stream, -1, -1); 90 | #endif 91 | } 92 | return stream; 93 | } 94 | 95 | template 96 | std::basic_ostream& bold(std::basic_ostream& stream) 97 | { 98 | if (_internal::is_colorized(stream)) 99 | { 100 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 101 | stream << "\033[1m"; 102 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 103 | #endif 104 | } 105 | return stream; 106 | } 107 | 108 | template 109 | std::basic_ostream& dark(std::basic_ostream& stream) 110 | { 111 | if (_internal::is_colorized(stream)) 112 | { 113 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 114 | stream << "\033[2m"; 115 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 116 | #endif 117 | } 118 | return stream; 119 | } 120 | 121 | template 122 | std::basic_ostream& italic(std::basic_ostream& stream) 123 | { 124 | if (_internal::is_colorized(stream)) 125 | { 126 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 127 | stream << "\033[3m"; 128 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 129 | #endif 130 | } 131 | return stream; 132 | } 133 | 134 | template 135 | std::basic_ostream& underline(std::basic_ostream& stream) 136 | { 137 | if (_internal::is_colorized(stream)) 138 | { 139 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 140 | stream << "\033[4m"; 141 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 142 | _internal::win_change_attributes(stream, -1, COMMON_LVB_UNDERSCORE); 143 | #endif 144 | } 145 | return stream; 146 | } 147 | 148 | template 149 | std::basic_ostream& blink(std::basic_ostream& stream) 150 | { 151 | if (_internal::is_colorized(stream)) 152 | { 153 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 154 | stream << "\033[5m"; 155 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 156 | #endif 157 | } 158 | return stream; 159 | } 160 | 161 | template 162 | std::basic_ostream& reverse(std::basic_ostream& stream) 163 | { 164 | if (_internal::is_colorized(stream)) 165 | { 166 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 167 | stream << "\033[7m"; 168 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 169 | #endif 170 | } 171 | return stream; 172 | } 173 | 174 | template 175 | std::basic_ostream& concealed(std::basic_ostream& stream) 176 | { 177 | if (_internal::is_colorized(stream)) 178 | { 179 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 180 | stream << "\033[8m"; 181 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 182 | #endif 183 | } 184 | return stream; 185 | } 186 | 187 | template 188 | std::basic_ostream& crossed(std::basic_ostream& stream) 189 | { 190 | if (_internal::is_colorized(stream)) 191 | { 192 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 193 | stream << "\033[9m"; 194 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 195 | #endif 196 | } 197 | return stream; 198 | } 199 | 200 | template 201 | std::basic_ostream& color(std::basic_ostream& stream) 202 | { 203 | if (_internal::is_colorized(stream)) 204 | { 205 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 206 | stream << "\033[38;5;" << +code << "m"; 207 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 208 | #endif 209 | } 210 | return stream; 211 | } 212 | 213 | template 214 | std::basic_ostream& on_color(std::basic_ostream& stream) 215 | { 216 | if (_internal::is_colorized(stream)) 217 | { 218 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 219 | stream << "\033[48;5;" << +code << "m"; 220 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 221 | #endif 222 | } 223 | return stream; 224 | } 225 | 226 | template 227 | std::basic_ostream& color(std::basic_ostream& stream) 228 | { 229 | if (_internal::is_colorized(stream)) 230 | { 231 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 232 | stream << "\033[38;2;" << +r << ";" << +g << ";" << +b << "m"; 233 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 234 | #endif 235 | } 236 | return stream; 237 | } 238 | 239 | template 240 | std::basic_ostream& on_color(std::basic_ostream& stream) 241 | { 242 | if (_internal::is_colorized(stream)) 243 | { 244 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 245 | stream << "\033[48;2;" << +r << ";" << +g << ";" << +b << "m"; 246 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 247 | #endif 248 | } 249 | return stream; 250 | } 251 | 252 | template 253 | std::basic_ostream& grey(std::basic_ostream& stream) 254 | { 255 | if (_internal::is_colorized(stream)) 256 | { 257 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 258 | stream << "\033[30m"; 259 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 260 | _internal::win_change_attributes(stream, 261 | 0 // grey (black) 262 | ); 263 | #endif 264 | } 265 | return stream; 266 | } 267 | 268 | template 269 | std::basic_ostream& red(std::basic_ostream& stream) 270 | { 271 | if (_internal::is_colorized(stream)) 272 | { 273 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 274 | stream << "\033[31m"; 275 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 276 | _internal::win_change_attributes(stream, 277 | FOREGROUND_RED 278 | ); 279 | #endif 280 | } 281 | return stream; 282 | } 283 | 284 | template 285 | std::basic_ostream& green(std::basic_ostream& stream) 286 | { 287 | if (_internal::is_colorized(stream)) 288 | { 289 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 290 | stream << "\033[32m"; 291 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 292 | _internal::win_change_attributes(stream, 293 | FOREGROUND_GREEN 294 | ); 295 | #endif 296 | } 297 | return stream; 298 | } 299 | 300 | template 301 | std::basic_ostream& yellow(std::basic_ostream& stream) 302 | { 303 | if (_internal::is_colorized(stream)) 304 | { 305 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 306 | stream << "\033[33m"; 307 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 308 | _internal::win_change_attributes(stream, 309 | FOREGROUND_GREEN | FOREGROUND_RED 310 | ); 311 | #endif 312 | } 313 | return stream; 314 | } 315 | 316 | template 317 | std::basic_ostream& blue(std::basic_ostream& stream) 318 | { 319 | if (_internal::is_colorized(stream)) 320 | { 321 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 322 | stream << "\033[34m"; 323 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 324 | _internal::win_change_attributes(stream, 325 | FOREGROUND_BLUE 326 | ); 327 | #endif 328 | } 329 | return stream; 330 | } 331 | 332 | template 333 | std::basic_ostream& magenta(std::basic_ostream& stream) 334 | { 335 | if (_internal::is_colorized(stream)) 336 | { 337 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 338 | stream << "\033[35m"; 339 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 340 | _internal::win_change_attributes(stream, 341 | FOREGROUND_BLUE | FOREGROUND_RED 342 | ); 343 | #endif 344 | } 345 | return stream; 346 | } 347 | 348 | template 349 | std::basic_ostream& cyan(std::basic_ostream& stream) 350 | { 351 | if (_internal::is_colorized(stream)) 352 | { 353 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 354 | stream << "\033[36m"; 355 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 356 | _internal::win_change_attributes(stream, 357 | FOREGROUND_BLUE | FOREGROUND_GREEN 358 | ); 359 | #endif 360 | } 361 | return stream; 362 | } 363 | 364 | template 365 | std::basic_ostream& white(std::basic_ostream& stream) 366 | { 367 | if (_internal::is_colorized(stream)) 368 | { 369 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 370 | stream << "\033[37m"; 371 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 372 | _internal::win_change_attributes(stream, 373 | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED 374 | ); 375 | #endif 376 | } 377 | return stream; 378 | } 379 | 380 | 381 | template 382 | std::basic_ostream& bright_grey(std::basic_ostream& stream) 383 | { 384 | if (_internal::is_colorized(stream)) 385 | { 386 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 387 | stream << "\033[90m"; 388 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 389 | _internal::win_change_attributes(stream, 390 | 0 | FOREGROUND_INTENSITY // grey (black) 391 | ); 392 | #endif 393 | } 394 | return stream; 395 | } 396 | 397 | template 398 | std::basic_ostream& bright_red(std::basic_ostream& stream) 399 | { 400 | if (_internal::is_colorized(stream)) 401 | { 402 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 403 | stream << "\033[91m"; 404 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 405 | _internal::win_change_attributes(stream, 406 | FOREGROUND_RED | FOREGROUND_INTENSITY 407 | ); 408 | #endif 409 | } 410 | return stream; 411 | } 412 | 413 | template 414 | std::basic_ostream& bright_green(std::basic_ostream& stream) 415 | { 416 | if (_internal::is_colorized(stream)) 417 | { 418 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 419 | stream << "\033[92m"; 420 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 421 | _internal::win_change_attributes(stream, 422 | FOREGROUND_GREEN | FOREGROUND_INTENSITY 423 | ); 424 | #endif 425 | } 426 | return stream; 427 | } 428 | 429 | template 430 | std::basic_ostream& bright_yellow(std::basic_ostream& stream) 431 | { 432 | if (_internal::is_colorized(stream)) 433 | { 434 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 435 | stream << "\033[93m"; 436 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 437 | _internal::win_change_attributes(stream, 438 | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY 439 | ); 440 | #endif 441 | } 442 | return stream; 443 | } 444 | 445 | template 446 | std::basic_ostream& bright_blue(std::basic_ostream& stream) 447 | { 448 | if (_internal::is_colorized(stream)) 449 | { 450 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 451 | stream << "\033[94m"; 452 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 453 | _internal::win_change_attributes(stream, 454 | FOREGROUND_BLUE | FOREGROUND_INTENSITY 455 | ); 456 | #endif 457 | } 458 | return stream; 459 | } 460 | 461 | template 462 | std::basic_ostream& bright_magenta(std::basic_ostream& stream) 463 | { 464 | if (_internal::is_colorized(stream)) 465 | { 466 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 467 | stream << "\033[95m"; 468 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 469 | _internal::win_change_attributes(stream, 470 | FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY 471 | ); 472 | #endif 473 | } 474 | return stream; 475 | } 476 | 477 | template 478 | std::basic_ostream& bright_cyan(std::basic_ostream& stream) 479 | { 480 | if (_internal::is_colorized(stream)) 481 | { 482 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 483 | stream << "\033[96m"; 484 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 485 | _internal::win_change_attributes(stream, 486 | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY 487 | ); 488 | #endif 489 | } 490 | return stream; 491 | } 492 | 493 | template 494 | std::basic_ostream& bright_white(std::basic_ostream& stream) 495 | { 496 | if (_internal::is_colorized(stream)) 497 | { 498 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 499 | stream << "\033[97m"; 500 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 501 | _internal::win_change_attributes(stream, 502 | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY 503 | ); 504 | #endif 505 | } 506 | return stream; 507 | } 508 | 509 | 510 | template 511 | std::basic_ostream& on_grey(std::basic_ostream& stream) 512 | { 513 | if (_internal::is_colorized(stream)) 514 | { 515 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 516 | stream << "\033[40m"; 517 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 518 | _internal::win_change_attributes(stream, -1, 519 | 0 // grey (black) 520 | ); 521 | #endif 522 | } 523 | return stream; 524 | } 525 | 526 | template 527 | std::basic_ostream& on_red(std::basic_ostream& stream) 528 | { 529 | if (_internal::is_colorized(stream)) 530 | { 531 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 532 | stream << "\033[41m"; 533 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 534 | _internal::win_change_attributes(stream, -1, 535 | BACKGROUND_RED 536 | ); 537 | #endif 538 | } 539 | return stream; 540 | } 541 | 542 | template 543 | std::basic_ostream& on_green(std::basic_ostream& stream) 544 | { 545 | if (_internal::is_colorized(stream)) 546 | { 547 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 548 | stream << "\033[42m"; 549 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 550 | _internal::win_change_attributes(stream, -1, 551 | BACKGROUND_GREEN 552 | ); 553 | #endif 554 | } 555 | return stream; 556 | } 557 | 558 | template 559 | std::basic_ostream& on_yellow(std::basic_ostream& stream) 560 | { 561 | if (_internal::is_colorized(stream)) 562 | { 563 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 564 | stream << "\033[43m"; 565 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 566 | _internal::win_change_attributes(stream, -1, 567 | BACKGROUND_GREEN | BACKGROUND_RED 568 | ); 569 | #endif 570 | } 571 | return stream; 572 | } 573 | 574 | template 575 | std::basic_ostream& on_blue(std::basic_ostream& stream) 576 | { 577 | if (_internal::is_colorized(stream)) 578 | { 579 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 580 | stream << "\033[44m"; 581 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 582 | _internal::win_change_attributes(stream, -1, 583 | BACKGROUND_BLUE 584 | ); 585 | #endif 586 | } 587 | return stream; 588 | } 589 | 590 | template 591 | std::basic_ostream& on_magenta(std::basic_ostream& stream) 592 | { 593 | if (_internal::is_colorized(stream)) 594 | { 595 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 596 | stream << "\033[45m"; 597 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 598 | _internal::win_change_attributes(stream, -1, 599 | BACKGROUND_BLUE | BACKGROUND_RED 600 | ); 601 | #endif 602 | } 603 | return stream; 604 | } 605 | 606 | template 607 | std::basic_ostream& on_cyan(std::basic_ostream& stream) 608 | { 609 | if (_internal::is_colorized(stream)) 610 | { 611 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 612 | stream << "\033[46m"; 613 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 614 | _internal::win_change_attributes(stream, -1, 615 | BACKGROUND_GREEN | BACKGROUND_BLUE 616 | ); 617 | #endif 618 | } 619 | return stream; 620 | } 621 | 622 | template 623 | std::basic_ostream& on_white(std::basic_ostream& stream) 624 | { 625 | if (_internal::is_colorized(stream)) 626 | { 627 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 628 | stream << "\033[47m"; 629 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 630 | _internal::win_change_attributes(stream, -1, 631 | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED 632 | ); 633 | #endif 634 | } 635 | 636 | return stream; 637 | } 638 | 639 | 640 | template 641 | std::basic_ostream& on_bright_grey(std::basic_ostream& stream) 642 | { 643 | if (_internal::is_colorized(stream)) 644 | { 645 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 646 | stream << "\033[100m"; 647 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 648 | _internal::win_change_attributes(stream, -1, 649 | 0 | BACKGROUND_INTENSITY // grey (black) 650 | ); 651 | #endif 652 | } 653 | return stream; 654 | } 655 | 656 | template 657 | std::basic_ostream& on_bright_red(std::basic_ostream& stream) 658 | { 659 | if (_internal::is_colorized(stream)) 660 | { 661 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 662 | stream << "\033[101m"; 663 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 664 | _internal::win_change_attributes(stream, -1, 665 | BACKGROUND_RED | BACKGROUND_INTENSITY 666 | ); 667 | #endif 668 | } 669 | return stream; 670 | } 671 | 672 | template 673 | std::basic_ostream& on_bright_green(std::basic_ostream& stream) 674 | { 675 | if (_internal::is_colorized(stream)) 676 | { 677 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 678 | stream << "\033[102m"; 679 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 680 | _internal::win_change_attributes(stream, -1, 681 | BACKGROUND_GREEN | BACKGROUND_INTENSITY 682 | ); 683 | #endif 684 | } 685 | return stream; 686 | } 687 | 688 | template 689 | std::basic_ostream& on_bright_yellow(std::basic_ostream& stream) 690 | { 691 | if (_internal::is_colorized(stream)) 692 | { 693 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 694 | stream << "\033[103m"; 695 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 696 | _internal::win_change_attributes(stream, -1, 697 | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY 698 | ); 699 | #endif 700 | } 701 | return stream; 702 | } 703 | 704 | template 705 | std::basic_ostream& on_bright_blue(std::basic_ostream& stream) 706 | { 707 | if (_internal::is_colorized(stream)) 708 | { 709 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 710 | stream << "\033[104m"; 711 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 712 | _internal::win_change_attributes(stream, -1, 713 | BACKGROUND_BLUE | BACKGROUND_INTENSITY 714 | ); 715 | #endif 716 | } 717 | return stream; 718 | } 719 | 720 | template 721 | std::basic_ostream& on_bright_magenta(std::basic_ostream& stream) 722 | { 723 | if (_internal::is_colorized(stream)) 724 | { 725 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 726 | stream << "\033[105m"; 727 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 728 | _internal::win_change_attributes(stream, -1, 729 | BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY 730 | ); 731 | #endif 732 | } 733 | return stream; 734 | } 735 | 736 | template 737 | std::basic_ostream& on_bright_cyan(std::basic_ostream& stream) 738 | { 739 | if (_internal::is_colorized(stream)) 740 | { 741 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 742 | stream << "\033[106m"; 743 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 744 | _internal::win_change_attributes(stream, -1, 745 | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_INTENSITY 746 | ); 747 | #endif 748 | } 749 | return stream; 750 | } 751 | 752 | template 753 | std::basic_ostream& on_bright_white(std::basic_ostream& stream) 754 | { 755 | if (_internal::is_colorized(stream)) 756 | { 757 | #if defined(TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES) 758 | stream << "\033[107m"; 759 | #elif defined(TERMCOLOR_USE_WINDOWS_API) 760 | _internal::win_change_attributes(stream, -1, 761 | BACKGROUND_GREEN | BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY 762 | ); 763 | #endif 764 | } 765 | 766 | return stream; 767 | } 768 | 769 | 770 | 771 | //! Since C++ hasn't a way to hide something in the header from 772 | //! the outer access, I have to introduce this namespace which 773 | //! is used for internal purpose and should't be access from 774 | //! the user code. 775 | namespace _internal 776 | { 777 | // An index to be used to access a private storage of I/O streams. See 778 | // colorize / nocolorize I/O manipulators for details. Due to the fact 779 | // that static variables ain't shared between translation units, inline 780 | // function with local static variable is used to do the trick and share 781 | // the variable value between translation units. 782 | inline int colorize_index() 783 | { 784 | static int colorize_index = std::ios_base::xalloc(); 785 | return colorize_index; 786 | } 787 | 788 | //! Since C++ hasn't a true way to extract stream handler 789 | //! from the a given `std::ostream` object, I have to write 790 | //! this kind of hack. 791 | inline 792 | FILE* get_standard_stream(const std::ostream& stream) 793 | { 794 | if (&stream == &std::cout) 795 | return stdout; 796 | else if (&stream == &std::cerr || &stream == &std::clog) 797 | return stderr; 798 | 799 | return nullptr; 800 | } 801 | 802 | //! Since C++ hasn't a true way to extract stream handler 803 | //! from the a given `std::wostream` object, I have to write 804 | //! this kind of hack. 805 | inline 806 | FILE* get_standard_stream(const std::wostream& stream) 807 | { 808 | if (&stream == &std::wcout) 809 | return stdout; 810 | else if (&stream == &std::wcerr || &stream == &std::wclog) 811 | return stderr; 812 | 813 | return nullptr; 814 | } 815 | 816 | // Say whether a given stream should be colorized or not. It's always 817 | // true for ATTY streams and may be true for streams marked with 818 | // colorize flag. 819 | template 820 | bool is_colorized(std::basic_ostream& stream) 821 | { 822 | return is_atty(stream) || static_cast(stream.iword(colorize_index())); 823 | } 824 | 825 | //! Test whether a given `std::ostream` object refers to 826 | //! a terminal. 827 | template 828 | bool is_atty(const std::basic_ostream& stream) 829 | { 830 | FILE* std_stream = get_standard_stream(stream); 831 | 832 | // Unfortunately, fileno() ends with segmentation fault 833 | // if invalid file descriptor is passed. So we need to 834 | // handle this case gracefully and assume it's not a tty 835 | // if standard stream is not detected, and 0 is returned. 836 | if (!std_stream) 837 | return false; 838 | 839 | #if defined(TERMCOLOR_TARGET_POSIX) 840 | return ::isatty(fileno(std_stream)); 841 | #elif defined(TERMCOLOR_TARGET_WINDOWS) 842 | return ::_isatty(_fileno(std_stream)); 843 | #else 844 | return false; 845 | #endif 846 | } 847 | 848 | #if defined(TERMCOLOR_TARGET_WINDOWS) 849 | 850 | //! same hack as used in get_standard_stream function, but for Windows with `std::ostream` 851 | inline HANDLE get_terminal_handle(std::ostream& stream) 852 | { 853 | if (&stream == &std::cout) 854 | return GetStdHandle(STD_OUTPUT_HANDLE); 855 | else if (&stream == &std::cerr || &stream == &std::clog) 856 | return GetStdHandle(STD_ERROR_HANDLE); 857 | return nullptr; 858 | } 859 | 860 | //! same hack as used in get_standard_stream function, but for Windows with `std::wostream` 861 | inline HANDLE get_terminal_handle(std::wostream& stream) 862 | { 863 | if (&stream == &std::wcout) 864 | return GetStdHandle(STD_OUTPUT_HANDLE); 865 | else if (&stream == &std::wcerr || &stream == &std::wclog) 866 | return GetStdHandle(STD_ERROR_HANDLE); 867 | return nullptr; 868 | } 869 | 870 | //! Change Windows Terminal colors attribute. If some 871 | //! parameter is `-1` then attribute won't changed. 872 | template 873 | void win_change_attributes(std::basic_ostream& stream, int foreground, int background) 874 | { 875 | // yeah, i know.. it's ugly, it's windows. 876 | static WORD defaultAttributes = 0; 877 | 878 | // Windows doesn't have ANSI escape sequences and so we use special 879 | // API to change Terminal output color. That means we can't 880 | // manipulate colors by means of "std::stringstream" and hence 881 | // should do nothing in this case. 882 | if (!_internal::is_atty(stream)) 883 | return; 884 | 885 | // get terminal handle 886 | HANDLE hTerminal = INVALID_HANDLE_VALUE; 887 | hTerminal = get_terminal_handle(stream); 888 | 889 | // save default terminal attributes if it unsaved 890 | if (!defaultAttributes) 891 | { 892 | CONSOLE_SCREEN_BUFFER_INFO info; 893 | if (!GetConsoleScreenBufferInfo(hTerminal, &info)) 894 | return; 895 | defaultAttributes = info.wAttributes; 896 | } 897 | 898 | // restore all default settings 899 | if (foreground == -1 && background == -1) 900 | { 901 | SetConsoleTextAttribute(hTerminal, defaultAttributes); 902 | return; 903 | } 904 | 905 | // get current settings 906 | CONSOLE_SCREEN_BUFFER_INFO info; 907 | if (!GetConsoleScreenBufferInfo(hTerminal, &info)) 908 | return; 909 | 910 | if (foreground != -1) 911 | { 912 | info.wAttributes &= ~(info.wAttributes & 0x0F); 913 | info.wAttributes |= static_cast(foreground); 914 | } 915 | 916 | if (background != -1) 917 | { 918 | info.wAttributes &= ~(info.wAttributes & 0xF0); 919 | info.wAttributes |= static_cast(background); 920 | } 921 | 922 | SetConsoleTextAttribute(hTerminal, info.wAttributes); 923 | } 924 | #endif // TERMCOLOR_TARGET_WINDOWS 925 | 926 | } // namespace _internal 927 | 928 | } // namespace termcolor 929 | 930 | 931 | #undef TERMCOLOR_TARGET_POSIX 932 | #undef TERMCOLOR_TARGET_WINDOWS 933 | 934 | #if defined(TERMCOLOR_AUTODETECTED_IMPLEMENTATION) 935 | # undef TERMCOLOR_USE_ANSI_ESCAPE_SEQUENCES 936 | # undef TERMCOLOR_USE_WINDOWS_API 937 | #endif 938 | 939 | #endif // TERMCOLOR_HPP_ 940 | -------------------------------------------------------------------------------- /main.cpp: -------------------------------------------------------------------------------- 1 | #include "lib/includes.h" 2 | #include "modules/CloudflareBypass.h" 3 | #include "modules/Breacher.h" 4 | #include "modules/GenerateIP.h" 5 | #include "modules/FindPerson.h" 6 | #include "modules/HttpGet.h" 7 | #include "modules/HttpPost.h" 8 | 9 | void cfbMenu(){ 10 | std::cout << "\n HackWebTool - by lomaster | OldTeam\n\n"; 11 | std::cout << " CouldFlare bypass:\n"; 12 | std::cout << " Usage: ./HackTool [-C] [-f path_file] [-P protocol] [-D domain]\n"; 13 | std::cout << " Breacher:\n"; 14 | std::cout << " Usage: ./HackTool [-B] [-f path_file] [-P protocol] [-D domain]\n"; 15 | std::cout << " FindPerson:\n"; 16 | std::cout << " Usage: ./HackTool [-FP] [-n, --name]\n"; 17 | std::cout << " GeneratorIP4:\n"; 18 | std::cout << " Usage: ./HackTool [-GI4] [--count]\n"; 19 | std::cout << " HttpGet:\n"; 20 | std::cout << " Usage: ./HackTool [-HTTPg] [-D domain]\n"; 21 | std::cout << " HttpPost:\n"; 22 | std::cout << " Usage: ./HackTool [-HTTPp] [-D domain message]\n\n"; 23 | std::cout << " optional arguments:\n"; 24 | std::cout << " -h, --help show this help message\n\n"; 25 | } 26 | int main(int argc, char *argv[]){ 27 | CloudflareBypass cfb; 28 | Breacher b; 29 | GenerateIP gi; 30 | FindPerson fp; 31 | if (argc <= 1) 32 | { 33 | if (argv[0]) 34 | cfbMenu(); 35 | exit(1); 36 | } 37 | if (std::string(argv[1]) == "-h" || std::string(argv[1]) == "--help") { 38 | cfbMenu(); 39 | } 40 | if (std::string(argv[1]) == "-C") { 41 | if (std::string(argv[2]) == "-f") { 42 | cfb.openFile(argv[3]); 43 | } 44 | if (std::string(argv[4]) == "-P") { 45 | cfb.setSec(argv[5]); 46 | } 47 | if (std::string(argv[6]) == "-D") { 48 | cfb.setDomian(argv[7]); 49 | cfb.mainMenu(); 50 | } 51 | } 52 | if (std::string(argv[1]) == "-B"){ 53 | if (std::string(argv[2]) == "-f") { 54 | b.openFile(argv[3]); 55 | } 56 | if (std::string(argv[4]) == "-P") { 57 | b.setSec(argv[5]); 58 | } 59 | if (std::string(argv[6]) == "-D") { 60 | b.setDomian(argv[7]); 61 | b.mainMenu(); 62 | } 63 | } 64 | if (std::string(argv[1]) == "-GI4") { 65 | if (std::string(argv[2]) == "--count") { 66 | gi.mainMenu(argv[3]); 67 | } 68 | } 69 | if (std::string(argv[1]) == "-FP") { 70 | if (std::string(argv[2]) == "-n" || std::string(argv[2]) == "--name") { 71 | fp.mainMenu(argv[3]); 72 | } 73 | } 74 | if (std::string(argv[1]) == "-HTTPg") { 75 | if (std::string(argv[2]) == "-D") { 76 | mainMenuHttpGet(argv[3]); 77 | } 78 | } 79 | if (std::string(argv[1]) == "-HTTPp") { 80 | if (std::string(argv[4]) == "-D") { 81 | mainMenuHttpPost(argv[5],argv[6]); 82 | } 83 | } 84 | 85 | } -------------------------------------------------------------------------------- /modules/Breacher.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class Breacher 5 | { 6 | private: 7 | short loop=0; // Количество строк 8 | std::string domian; // Домен 9 | std::string array[500]; // Текст файла 10 | std::string line; // Считываемая строка 11 | std::string Secure; // http или https и др 12 | public: 13 | void openFile(std::string path); 14 | void setDomian(std::string domian); 15 | void setSec(std::string Secure); 16 | void mainMenu(); 17 | }; 18 | 19 | -------------------------------------------------------------------------------- /modules/CloudflareBypass.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class CloudflareBypass 5 | { 6 | private: 7 | short loop=0; // Количество строк 8 | std::string domian; // Домен 9 | std::string array[500]; // Текст файла 10 | std::string line; // Считываемая строка 11 | std::string result; // Домен + сабдомен 12 | std::string IP; // Угадайте 13 | std::string Secure; // http или https и др 14 | public: 15 | void openFile(std::string path); 16 | void setDomian(std::string domian); 17 | void setSec(std::string Secure); 18 | void mainMenu(); 19 | }; 20 | -------------------------------------------------------------------------------- /modules/FindPerson.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | class FindPerson 4 | { 5 | private: 6 | std::string services[5] = {"https://www.youtube.com/@", // Array services 7 | "https://vk.com/", "https://github.com/", "https://www.tumblr.com/", "https://ok.ru/"}; 8 | public: 9 | void mainMenu(std::string name); 10 | }; 11 | -------------------------------------------------------------------------------- /modules/GenerateIP.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | class GenerateIP 5 | { 6 | private: 7 | std::string result; 8 | public: 9 | std::string generateIP4(); 10 | void mainMenu(std::string count); 11 | }; 12 | -------------------------------------------------------------------------------- /modules/HttpGet.h: -------------------------------------------------------------------------------- 1 | #include 2 | #ifdef __cplusplus 3 | extern "C" { 4 | #endif 5 | void mainMenuHttpGet(char* domain); 6 | size_t ClearWrite(void *buffer, size_t size, size_t nmemb, void *userp); 7 | #ifdef __cplusplus 8 | } 9 | #endif 10 | -------------------------------------------------------------------------------- /modules/HttpPost.h: -------------------------------------------------------------------------------- 1 | #include 2 | #ifdef __cplusplus 3 | extern "C" { 4 | #endif 5 | void mainMenuHttpPost(char* domain, const char* MESSAGE); 6 | #ifdef __cplusplus 7 | } 8 | #endif 9 | -------------------------------------------------------------------------------- /pwd/path.txt: -------------------------------------------------------------------------------- 1 | / 2 | /acceso.asp 3 | /acceso.php 4 | /access/ 5 | /access.php 6 | /account/ 7 | /account.asp 8 | /account.html 9 | /account.php 10 | /acct_login/ 11 | /_adm_/ 12 | /_adm/ 13 | /adm/ 14 | /adm2/ 15 | /adm/admloginuser.asp 16 | /adm/admloginuser.php 17 | /adm.asp 18 | /adm_auth.asp 19 | /adm_auth.php 20 | /adm.html 21 | /_admin_/ 22 | /_admin/ 23 | /admin/ 24 | /Admin/ 25 | /ADMIN/ 26 | /admin1/ 27 | /admin1.asp 28 | /admin1.html 29 | /admin1.php 30 | /admin2/ 31 | /admin2.asp 32 | /admin2.html 33 | /admin2/index/ 34 | /admin2/index.asp 35 | /admin2/index.php 36 | /admin2/login.asp 37 | /admin2/login.php 38 | /admin2.php 39 | /admin3/ 40 | /admin4/ 41 | /admin4_account/ 42 | /admin4_colon/ 43 | /admin5/ 44 | /admin/account.asp 45 | /admin/account.html 46 | /admin/account.php 47 | /admin/add_banner.php/ 48 | /admin/addblog.php 49 | /admin/add_gallery_image.php 50 | /admin/add.php 51 | /admin/add-room.php 52 | /admin/add-slider.php 53 | /admin/add_testimonials.php 54 | /admin/admin/ 55 | /admin/adminarea.php 56 | /admin/admin.asp 57 | /admin/AdminDashboard.php 58 | /admin/admin-home.php 59 | /admin/AdminHome.php 60 | /admin/admin.html 61 | /admin/admin_index.php 62 | /admin/admin_login.asp 63 | /admin/admin-login.asp 64 | /admin/adminLogin.asp 65 | /admin/admin_login.html 66 | /admin/admin-login.html 67 | /admin/adminLogin.html 68 | /admin/admin_login.php 69 | /admin/admin-login.php 70 | /admin/adminLogin.php 71 | /admin/admin_management.php 72 | /admin/admin.php 73 | /admin/admin_users.php 74 | /admin/adminview.php 75 | /admin/adm.php 76 | /admin_area/ 77 | /adminarea/ 78 | /admin_area/admin.asp 79 | /adminarea/admin.asp 80 | /admin_area/admin.html 81 | /adminarea/admin.html 82 | /admin_area/admin.php 83 | /adminarea/admin.php 84 | /admin_area/index.asp 85 | /adminarea/index.asp 86 | /admin_area/index.html 87 | /adminarea/index.html 88 | /admin_area/index.php 89 | /adminarea/index.php 90 | /admin_area/login.asp 91 | /adminarea/login.asp 92 | /admin_area/login.html 93 | /adminarea/login.html 94 | /admin_area/login.php 95 | /adminarea/login.php 96 | /admin.asp 97 | /admin/banner.php 98 | /admin/banners_report.php 99 | /admin/category.php 100 | /admin/change_gallery.php 101 | /admin/checklogin.php 102 | /admin/configration.php 103 | /admincontrol.asp 104 | /admincontrol.html 105 | /admincontrol/login.asp 106 | /admincontrol/login.html 107 | /admincontrol/login.php 108 | /admin/control_pages/admin_home.php 109 | /admin/controlpanel.asp 110 | /admin/controlpanel.html 111 | /admin/controlpanel.php 112 | /admincontrol.php 113 | /admincontrol.php/ 114 | /admin/cpanel.php 115 | /admin/cp.asp 116 | /admin/CPhome.php 117 | /admin/cp.html 118 | /admincp/index.asp 119 | /admincp/index.html 120 | /admincp/login.asp 121 | /admin/cp.php 122 | /admin/dashboard/index.php 123 | /admin/dashboard.php 124 | /admin/dashbord.php 125 | /admin/dash.php 126 | /admin/default.php 127 | /adm/index.asp 128 | /adm/index.html 129 | /adm/index.php 130 | /admin/enter.php 131 | /admin/event.php 132 | /admin/form.php 133 | /admin/gallery.php 134 | /admin/headline.php 135 | /admin/home.asp 136 | /admin/home.html 137 | /admin_home.php 138 | /admin/home.php 139 | /admin.html 140 | /admin/index.asp 141 | /admin/index-digital.php 142 | /admin/index.html 143 | /admin/index.php 144 | /admin/index_ref.php 145 | /admin/initialadmin.php 146 | /administer/ 147 | /administr8/ 148 | /administr8.asp 149 | /administr8.html 150 | /administr8.php 151 | /administracion.php 152 | /administrador/ 153 | /administratie/ 154 | /administration/ 155 | /administration.html 156 | /administration.php 157 | /administrator 158 | /_administrator_/ 159 | /_administrator/ 160 | /administrator/ 161 | /administrator/account.asp 162 | /administrator/account.html 163 | /administrator/account.php 164 | /administratoraccounts/ 165 | /administrator.asp 166 | /administrator.html 167 | /administrator/index.asp 168 | /administrator/index.html 169 | /administrator/index.php 170 | /administratorlogin/ 171 | /administrator/login.asp 172 | /administratorlogin.asp 173 | /administrator/login.html 174 | /administrator/login.php 175 | /administratorlogin.php 176 | /administratorlogin.php 177 | /administrator.php 178 | /administrators/ 179 | /administrivia/ 180 | /admin/leads.php 181 | /admin/list_gallery.php 182 | /admin/login 183 | /adminLogin/ 184 | /admin_login.asp 185 | /admin-login.asp 186 | /admin/login.asp 187 | /adminLogin.asp 188 | /admin/login-home.php 189 | /admin_login.html 190 | /admin-login.html 191 | /admin/login.html 192 | /adminLogin.html 193 | /ADMIN/login.html 194 | /admin_login.php 195 | /admin_login.php] 196 | /admin-login.php 197 | /admin-login.php/ 198 | /admin/login.php 199 | /adminLogin.php 200 | /ADMIN/login.php 201 | /admin/login_success.php 202 | /admin/loginsuccess.php 203 | /admin/log.php 204 | /admin_main.html 205 | /admin/main_page.php 206 | /admin/main.php/ 207 | /admin/ManageAdmin.php 208 | /admin/manageImages.php 209 | /admin/manage_team.php 210 | /admin/member_home.php 211 | /admin/moderator.php 212 | /admin/my_account.php 213 | /admin/myaccount.php 214 | /admin/overview.php 215 | /admin/page_management.php 216 | /admin/pages/home_admin.php 217 | /adminpanel/ 218 | /adminpanel.asp 219 | /adminpanel.html 220 | /adminpanel.php 221 | /admin.php 222 | /Admin/private/ 223 | /adminpro/ 224 | /admin/product.php 225 | /admin/products.php 226 | /admins/ 227 | /admins.asp 228 | /admin/save.php 229 | /admins.html 230 | /admin/slider.php 231 | /admin/specializations.php 232 | /admins.php 233 | /admin_tool/ 234 | /AdminTools/ 235 | /admin/uhome.html 236 | /admin/upload.php 237 | /admin/userpage.php 238 | /admin/viewblog.php 239 | /admin/viewmembers.php 240 | /admin/voucher.php 241 | /AdminWeb/ 242 | /admin/welcomepage.php 243 | /admin/welcome.php 244 | /admloginuser.asp 245 | /admloginuser.php 246 | /admon/ 247 | /ADMON/ 248 | /adm.php 249 | /affiliate.asp 250 | /affiliate.php 251 | /auth/ 252 | /auth/login/ 253 | /authorize.php 254 | /autologin/ 255 | /banneradmin/ 256 | /base/admin/ 257 | /bb-admin/ 258 | /bbadmin/ 259 | /bb-admin/admin.asp 260 | /bb-admin/admin.html 261 | /bb-admin/admin.php 262 | /bb-admin/index.asp 263 | /bb-admin/index.html 264 | /bb-admin/index.php 265 | /bb-admin/login.asp 266 | /bb-admin/login.html 267 | /bb-admin/login.php 268 | /bigadmin/ 269 | /blogindex/ 270 | /cadmins/ 271 | /ccms/ 272 | /ccms/index.php 273 | /ccms/login.php 274 | /ccp14admin/ 275 | /cms/ 276 | /cms/admin/ 277 | /cmsadmin/ 278 | /cms/_admin/logon.php 279 | /cms/login/ 280 | /configuration/ 281 | /configure/ 282 | /controlpanel/ 283 | /controlpanel.asp 284 | /controlpanel.html 285 | /controlpanel.php 286 | /cpanel/ 287 | /cPanel/ 288 | /cpanel_file/ 289 | /cp.asp 290 | /cp.html 291 | /cp.php 292 | /customer_login/ 293 | /database_administration/ 294 | /Database_Administration/ 295 | /db/admin.php 296 | /directadmin/ 297 | /dir-login/ 298 | /editor/ 299 | /edit.php 300 | /evmsadmin/ 301 | /ezsqliteadmin/ 302 | /fileadmin/ 303 | /fileadmin.asp 304 | /fileadmin.html 305 | /fileadmin.php 306 | /formslogin/ 307 | /forum/admin 308 | /globes_admin/ 309 | /home.asp 310 | /home.html 311 | /home.php 312 | /hpwebjetadmin/ 313 | /include/admin.php 314 | /includes/login.php 315 | /Indy_admin/ 316 | /instadmin/ 317 | /interactive/admin.php 318 | /irc-macadmin/ 319 | /links/login.php 320 | /LiveUser_Admin/ 321 | /login/ 322 | /login1/ 323 | /login.asp 324 | /login_db/ 325 | /loginflat/ 326 | /login.html 327 | /login/login.php 328 | /login.php 329 | /login-redirect/ 330 | /logins/ 331 | /login-us/ 332 | /logon/ 333 | /logo_sysadmin/ 334 | /Lotus_Domino_Admin/ 335 | /macadmin/ 336 | /mag/admin/ 337 | /maintenance/ 338 | /manage_admin.php 339 | /manager/ 340 | /manager/ispmgr/ 341 | /manuallogin/ 342 | /memberadmin/ 343 | /memberadmin.asp 344 | /memberadmin.php 345 | /members/ 346 | /memlogin/ 347 | /meta_login/ 348 | /modelsearch/admin.asp 349 | /modelsearch/admin.html 350 | /modelsearch/admin.php 351 | /modelsearch/index.asp 352 | /modelsearch/index.html 353 | /modelsearch/index.php 354 | /modelsearch/login.asp 355 | /modelsearch/login.html 356 | /modelsearch/login.php 357 | /moderator/ 358 | /moderator/admin.asp 359 | /moderator/admin.html 360 | /moderator/admin.php 361 | /moderator.asp 362 | /moderator.html 363 | /moderator/login.asp 364 | /moderator/login.html 365 | /moderator/login.php 366 | /moderator.php 367 | /moderator.php/ 368 | /myadmin/ 369 | /navSiteAdmin/ 370 | /newsadmin/ 371 | /nsw/admin/login.php 372 | /openvpnadmin/ 373 | /pages/admin/admin-login.asp 374 | /pages/admin/admin-login.html 375 | /pages/admin/admin-login.php 376 | /panel/ 377 | /panel-administracion/ 378 | /panel-administracion/admin.asp 379 | /panel-administracion/admin.html 380 | /panel-administracion/admin.php 381 | /panel-administracion/index.asp 382 | /panel-administracion/index.html 383 | /panel-administracion/index.php 384 | /panel-administracion/login.asp 385 | /panel-administracion/login.html 386 | /panel-administracion/login.php 387 | /panelc/ 388 | /paneldecontrol/ 389 | /panel.php 390 | /pgadmin/ 391 | /phpldapadmin/ 392 | /phpmyadmin/ 393 | /phppgadmin/ 394 | /phpSQLiteAdmin/ 395 | /platz_login/ 396 | /pma/ 397 | /power_user/ 398 | /project-admins/ 399 | /pureadmin/ 400 | /radmind/ 401 | /radmind-1/ 402 | /rcjakar/admin/login.php 403 | /rcLogin/ 404 | /server/ 405 | /Server/ 406 | /ServerAdministrator/ 407 | /server_admin_small/ 408 | /Server.asp 409 | /Server.html 410 | /Server.php 411 | /showlogin/ 412 | /simpleLogin/ 413 | /site/admin/ 414 | /siteadmin/ 415 | /siteadmin/index.asp 416 | /siteadmin/index.php 417 | /siteadmin/login.asp 418 | /siteadmin/login.html 419 | /site_admin/login.php 420 | /siteadmin/login.php 421 | /smblogin/ 422 | /sql-admin/ 423 | /sshadmin/ 424 | /ss_vms_admin_sm/ 425 | /staradmin/ 426 | /sub-login/ 427 | /Super-Admin/ 428 | /support_login/ 429 | /sys-admin/ 430 | /sysadmin/ 431 | /SysAdmin/ 432 | /SysAdmin2/ 433 | /sysadmin.asp 434 | /sysadmin.html 435 | /sysadmin.php 436 | /sysadmins/ 437 | /system_administration/ 438 | /system-administration/ 439 | /typo3/ 440 | /ur-admin/ 441 | /ur-admin.asp 442 | /ur-admin.html 443 | /ur-admin.php 444 | /useradmin/ 445 | /user.asp 446 | /user.html 447 | /UserLogin/ 448 | /user.php 449 | /usuario/ 450 | /usuarios/ 451 | /usuarios// 452 | /usuarios/login.php 453 | /utility_login/ 454 | /vadmind/ 455 | /vmailadmin/ 456 | /webadmin/ 457 | /WebAdmin/ 458 | /webadmin/admin.asp 459 | /webadmin/admin.html 460 | /webadmin/admin.php 461 | /webadmin.asp 462 | /webadmin.html 463 | /webadmin/index.asp 464 | /webadmin/index.html 465 | /webadmin/index.php 466 | /webadmin/login.asp 467 | /webadmin/login.html 468 | /webadmin/login.php 469 | /webadmin.php 470 | /webmaster/ 471 | /websvn/ 472 | /wizmysqladmin/ 473 | /wp-admin/ 474 | /wp-login/ 475 | /wplogin/ 476 | /wp-login.php 477 | /xlogin/ 478 | /yonetici.asp 479 | /yonetici.html 480 | /yonetici.php 481 | /yonetim.asp 482 | /yonetim.html 483 | /yonetim.php -------------------------------------------------------------------------------- /pwd/sub.txt: -------------------------------------------------------------------------------- 1 | ftp 2 | cpanel 3 | webmail 4 | localhost 5 | news 6 | resources 7 | insights 8 | articles 9 | local 10 | landing 11 | mysql 12 | forum 13 | driect-connect 14 | blog 15 | vb 16 | forums 17 | home 18 | direct 19 | mail 20 | access 21 | admin 22 | administrator 23 | email 24 | downloads 25 | ssh 26 | owa 27 | bbs 28 | webmin 29 | paralel 30 | parallels 31 | www0 32 | www 33 | www1 34 | www3 35 | www4 36 | www5 37 | shop 38 | blogs 39 | test 40 | mx1 41 | cdn 42 | mail1 43 | secure 44 | server 45 | ns1 46 | ns2 47 | smtp 48 | vpn 49 | m 50 | mail2 51 | postal 52 | support 53 | web 54 | dev -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | g++ -c main.cpp 2 | gcc -lcurl -c src/clearCurl.c 3 | g++ -c -lcurl src/netCurl.cpp 4 | g++ -c -lcurl Breacher.cpp 5 | g++ -c -lcurl CloudflareBypass.cpp 6 | g++ -c -lcurl GenerateIP.cpp 7 | g++ -c -lcurl FindPerson.cpp 8 | gcc -lcurl -c HttpGet.c 9 | gcc -lcurl -c HttpPost.c 10 | g++ -lcurl -o HackTool main.o netCurl.o Breacher.o CloudflareBypass.o GenerateIP.o FindPerson.o HttpGet.o HttpPost.o clearCurl.o 11 | rm main.o 12 | rm netCurl.o 13 | rm Breacher.o 14 | rm CloudflareBypass.o 15 | rm GenerateIP.o 16 | rm FindPerson.o 17 | rm HttpGet.o 18 | rm clearCurl.o 19 | rm HttpPost.o 20 | clear 21 | ./HackTool -------------------------------------------------------------------------------- /src/clearCurl.c: -------------------------------------------------------------------------------- 1 | #include "clearCurl.h" 2 | #include 3 | 4 | size_t ClearWrite(void *buffer, size_t size, size_t nmemb, void *userp) 5 | { 6 | return size * nmemb; 7 | } -------------------------------------------------------------------------------- /src/clearCurl.h: -------------------------------------------------------------------------------- 1 | #include 2 | #ifdef __cplusplus 3 | extern "C" { 4 | #endif 5 | size_t ClearWrite(void *buffer, size_t size, size_t nmemb, void *userp); 6 | #ifdef __cplusplus 7 | } 8 | #endif -------------------------------------------------------------------------------- /src/netCurl.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include "curl/curl.h" 3 | #include "netCurl.h" 4 | #include "clearCurl.h" 5 | 6 | long ResponseCode(std::string link) 7 | { 8 | CURL *curl = curl_easy_init(); 9 | if(curl) { 10 | CURLcode res; 11 | const char * linkConvert = link.c_str(); 12 | curl_easy_setopt(curl, CURLOPT_URL, linkConvert); 13 | curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ClearWrite); 14 | res = curl_easy_perform(curl); 15 | 16 | if(res == CURLE_OK) { 17 | long response_code; 18 | curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code); 19 | return response_code; 20 | } 21 | curl_easy_cleanup(curl); 22 | return 0; 23 | } 24 | return 0; 25 | } 26 | 27 | std::string GetIP(std::string link){ 28 | CURL *curl = curl_easy_init(); 29 | if(curl) { 30 | CURLcode res; 31 | char *ip; 32 | const char * linkConvert = link.c_str(); 33 | curl_easy_setopt(curl, CURLOPT_URL, linkConvert); 34 | curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ClearWrite); 35 | res = curl_easy_perform(curl); 36 | if((res == CURLE_OK) && 37 | !curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip) && ip) { 38 | return ip; 39 | } 40 | else{ 41 | return "N/A"; 42 | } 43 | curl_easy_cleanup(curl); 44 | } 45 | return "0"; 46 | } 47 | 48 | -------------------------------------------------------------------------------- /src/netCurl.h: -------------------------------------------------------------------------------- 1 | #pragma once 2 | #include 3 | 4 | long ResponseCode(std::string link); 5 | std::string GetIP(std::string link); 6 | 7 | --------------------------------------------------------------------------------