|
12 | 12 |
|
13 | 13 | */ |
14 | 14 | #include "masscan.h" |
| 15 | +#include "masscan-version.h" |
15 | 16 | #include "ranges.h" |
16 | 17 | #include "string_s.h" |
17 | 18 | #include "logger.h" |
@@ -55,6 +56,88 @@ masscan_usage(void) |
55 | 56 | exit(1); |
56 | 57 | } |
57 | 58 |
|
| 59 | +/*************************************************************************** |
| 60 | + ***************************************************************************/ |
| 61 | +static void |
| 62 | +print_version() |
| 63 | +{ |
| 64 | + const char *cpu = "unknown"; |
| 65 | + const char *compiler = "unknown"; |
| 66 | + const char *compiler_version = "unknown"; |
| 67 | + const char *os = "unknown"; |
| 68 | + printf("\n"); |
| 69 | + printf("Masscan version %s ( %s )\n", |
| 70 | + MASSCAN_VERSION, |
| 71 | + "https://github.com/robertdavidgraham/masscan" |
| 72 | + ); |
| 73 | + printf("Compiled on: %s %s\n", __DATE__, __TIME__); |
| 74 | + |
| 75 | +#if defined(_MSC_VER) |
| 76 | + #if defined(_M_AMD64) || defined(_M_X64) |
| 77 | + cpu = "x86"; |
| 78 | + #elif defined(_M_IX86) |
| 79 | + cpu = "x86"; |
| 80 | + #elif defined (_M_ARM_FP) |
| 81 | + cpu = "arm"; |
| 82 | + #endif |
| 83 | + |
| 84 | + { |
| 85 | + int msc_ver = _MSC_VER; |
| 86 | + |
| 87 | + compiler = "VisualStudio"; |
| 88 | + |
| 89 | + if (msc_ver < 1500) |
| 90 | + compiler_version = "pre2008"; |
| 91 | + else if (msc_ver == 1500) |
| 92 | + compiler_version = "2008"; |
| 93 | + else if (msc_ver == 1600) |
| 94 | + compiler_version = "2010"; |
| 95 | + else if (msc_ver == 1700) |
| 96 | + compiler_version = "2012"; |
| 97 | + else if (msc_ver == 1800) |
| 98 | + compiler_version = "2013"; |
| 99 | + else |
| 100 | + compiler_version = "post-2013"; |
| 101 | + } |
| 102 | + |
| 103 | + |
| 104 | +#elif defined(__GNUC__) |
| 105 | + compiler = "gcc"; |
| 106 | + compiler_version = __VERSION__; |
| 107 | + |
| 108 | +#if defined(i386) || defined(__i386) || defined(__i386__) |
| 109 | + cpu = "x86"; |
| 110 | +#endif |
| 111 | + |
| 112 | +#if defined(__corei7) || defined(__corei7__) |
| 113 | + cpu = "x86-Corei7"; |
| 114 | +#endif |
| 115 | + |
| 116 | +#endif |
| 117 | + |
| 118 | +#if defined(WIN32) |
| 119 | + os = "Windows"; |
| 120 | +#elif defined(__linux__) |
| 121 | + os = "Linux"; |
| 122 | +#elif defined(__APPLE__) |
| 123 | + os = "Apple"; |
| 124 | +#elif defined(__MACH__) |
| 125 | + os = "MACH"; |
| 126 | +#elif defined(__FreeBSD__) |
| 127 | + os = "FreeBSD"; |
| 128 | +#elif defined(unix) || defined(__unix) || defined(__unix__) |
| 129 | + os = "Unix"; |
| 130 | +#endif |
| 131 | + |
| 132 | + printf("Compiler: %s %s\n", compiler, compiler_version); |
| 133 | + printf("OS: %s\n", os); |
| 134 | + printf("CPU: %s (%u bits)\n", cpu, (unsigned)(sizeof(void*))*8); |
| 135 | + |
| 136 | +#if defined(GIT) |
| 137 | + printf("GIT version: %s\n", GIT); |
| 138 | +#endif |
| 139 | +} |
| 140 | + |
58 | 141 | /*************************************************************************** |
59 | 142 | ***************************************************************************/ |
60 | 143 | static void |
@@ -1452,6 +1535,9 @@ masscan_set_parameter(struct Masscan *masscan, |
1452 | 1535 | } else { |
1453 | 1536 | masscan->nmap.ttl = x; |
1454 | 1537 | } |
| 1538 | + } else if (EQUALS("version", name)) { |
| 1539 | + print_version(); |
| 1540 | + exit(1); |
1455 | 1541 | } else if (EQUALS("version-intensity", name)) { |
1456 | 1542 | fprintf(stderr, "nmap(%s): unsupported\n", name); |
1457 | 1543 | exit(1); |
@@ -1485,7 +1571,8 @@ is_singleton(const char *name) |
1485 | 1571 | { |
1486 | 1572 | static const char *singletons[] = { |
1487 | 1573 | "echo", "selftest", "self-test", "regress", |
1488 | | - "system-dns", "traceroute", "version-light", |
| 1574 | + "system-dns", "traceroute", "version", |
| 1575 | + "version-light", |
1489 | 1576 | "version-all", "version-trace", |
1490 | 1577 | "osscan-limit", "osscan-guess", |
1491 | 1578 | "badsum", "reason", "open", "open-only", |
@@ -1856,7 +1943,7 @@ masscan_command_line(struct Masscan *masscan, int argc, char *argv[]) |
1856 | 1943 | } |
1857 | 1944 | break; |
1858 | 1945 | case 'V': /* print version and exit */ |
1859 | | - exit(1); |
| 1946 | + masscan_set_parameter(masscan, "version", ""); |
1860 | 1947 | break; |
1861 | 1948 | case 'W': |
1862 | 1949 | masscan->op = Operation_List_Adapters; |
|
0 commit comments