Commit ac9f6eca authored by Robert David Graham's avatar Robert David Graham
Browse files

redis

parent 08f4bc3a
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@
*/
#include "masscan.h"
#include "masscan-app.h"
#include "main-globals.h"
#include "output.h"
#include "string_s.h"

@@ -44,6 +45,7 @@ parse_status(struct Output *out,
     * Now report ther result
     */
    output_report_status(out, 
                    record.timestamp,
                    status,
                    record.ip,
                    record.port,
@@ -77,6 +79,7 @@ parse_banner3(struct Output *out, unsigned char *buf, size_t buf_length)
     */
    output_report_banner(
                out,
                record.timestamp,
                record.ip,
                6, /* this is always TCP */
                record.port,
@@ -108,6 +111,7 @@ parse_banner4(struct Output *out, unsigned char *buf, size_t buf_length)
     */
    output_report_banner(
                out,
                record.timestamp,
                record.ip,
                record.ip_proto,    /* TCP=6, UDP=17 */
                record.port,
+8 −5
Original line number Diff line number Diff line
/*
    log messages to console, depending on verbose level

    Use -v (or -d) to get more verbose output. The more -v you add, the
    Use -d to get more verbose output. The more -v you add, the
    more verbose the output becomes.

    Details about the running of the program go to <stderr>.
@@ -13,15 +13,18 @@
#include <stdarg.h>
#include <stdio.h>

int verbosity = 0; /* yea! a global variable!! */
int debuglevel = 0;
static int global_debug_level = 0; /* yea! a global variable!! */
void LOG_add_level(int x)
{
    global_debug_level += x;
}

/***************************************************************************
 ***************************************************************************/
void
vLOG(int level, const char *fmt, va_list marker)
{
    if (level <= verbosity) {
    if (level <= global_debug_level) {
        vfprintf(stderr, fmt, marker);
        fflush(stderr);
    }
@@ -46,7 +49,7 @@ LOG(int level, const char *fmt, ...)
void
vLOGip(int level, unsigned ip, unsigned port, const char *fmt, va_list marker)
{
    if (level <= verbosity) {
    if (level <= global_debug_level) {
        char sz_ip[16];
        
        sprintf_s(sz_ip, sizeof(sz_ip), "%u.%u.%u.%u", 
+2 −2
Original line number Diff line number Diff line
#ifndef LOGGER_H
#define LOGGER_H

extern int verbosity; /* defined in logger.c */
extern int debuglevel;

void LOG(int level, const char *fmt, ...);
void LOGip(int level, unsigned ip, unsigned port, const char *fmt, ...);

void LOG_add_level(int level);

#endif
+46 −4
Original line number Diff line number Diff line
@@ -195,6 +195,16 @@ masscan_echo(struct Masscan *masscan, FILE *fp)
    case Output_XML:        fprintf(fp, "output-format = xml\n"); break;
    case Output_Binary:     fprintf(fp, "output-format = binary\n"); break;
    case Output_JSON:       fprintf(fp, "output-format = json\n"); break;
    case Output_Redis:      
        fprintf(fp, "output-format = redis\n"); 
        fprintf(fp, "redis = %u.%u.%u.%u:%u\n",
            (unsigned char)(masscan->redis.ip>>24),
            (unsigned char)(masscan->redis.ip>>16),
            (unsigned char)(masscan->redis.ip>> 8),
            (unsigned char)(masscan->redis.ip>> 0),
            masscan->redis.port);
        break;

    default:
        fprintf(fp, "output-format = unknown(%u)\n", masscan->nmap.format);
        break;
@@ -903,6 +913,7 @@ masscan_set_parameter(struct Masscan *masscan,
        else if (EQUALS("xml", value))          masscan->nmap.format = Output_XML;
        else if (EQUALS("binary", value))       masscan->nmap.format = Output_Binary;
        else if (EQUALS("json", value))         masscan->nmap.format = Output_JSON;
        else if (EQUALS("redis", value))        masscan->nmap.format = Output_Redis;
        else {
            fprintf(stderr, "error: %s=%s\n", name, value);
        }
@@ -927,6 +938,33 @@ masscan_set_parameter(struct Masscan *masscan,
        ;
    } else if (EQUALS("reason", name)) {
        masscan->nmap.reason = 1;
    } else if (EQUALS("redis", name)) {
        struct Range range;
        unsigned offset = 0;
        unsigned max_offset = (unsigned)strlen(value);
        unsigned port = 6379;

        range = range_parse_ipv4(value, &offset, max_offset);
        if ((range.begin == 0 && range.end == 0) || range.begin != range.end) {
            LOG(0, "FAIL:  bad redis IP address: %s\n", value);
            exit(1);
        }
        if (offset < max_offset) {
            while (offset < max_offset && isspace(value[offset]))
                offset++;
            if (offset+1 < max_offset && value[offset] == ';' && isdigit(value[offset+1]&0xFF)) {
                port = strtoul(value+offset+1, 0, 0);
                if (port > 65535 || port == 0) {
                    LOG(0, "FAIL: bad redis port: %s\n", value+offset+1);
                    exit(1);
                }
            }
        }

        masscan->redis.ip = range.begin;
        masscan->redis.port = port;
        masscan->nmap.format = Output_Redis;
        strcpy_s(masscan->nmap.filename, sizeof(masscan->nmap.filename), "<redis>");
    } else if (EQUALS("release-memory", name)) {
        fprintf(stderr, "nmap(%s): this is our default option\n", name);
    } else if (EQUALS("resume", name)) {
@@ -1202,8 +1240,7 @@ masscan_command_line(struct Masscan *masscan, int argc, char *argv[])
                {
                    int v;
                    for (v=1; argv[i][v] == 'd'; v++) {
                        verbosity++;
						debuglevel++;
                        LOG_add_level(1);
					}
                }
                break;
@@ -1282,6 +1319,11 @@ masscan_command_line(struct Masscan *masscan, int argc, char *argv[])
                case 'X':
                    masscan->nmap.format = Output_XML;
                    break;
                case 'R':
                    masscan->nmap.format = Output_Redis;
                    if (i+1 < argc && argv[i+1][0] != '-')
                        masscan_set_parameter(masscan, "redis", argv[i+1]);
                    break;
                case 'S':
                    masscan->nmap.format = Output_ScriptKiddie;
                    fprintf(stderr, "nmap(%s): unsupported output format\n", argv[i]);
@@ -1414,7 +1456,7 @@ masscan_command_line(struct Masscan *masscan, int argc, char *argv[])
                {
                    int v;
                    for (v=1; argv[i][v] == 'v'; v++)
                        verbosity++;
                        LOG_add_level(1);
                }
                break;
            case 'V': /* print version and exit */

src/main-globals.h

0 → 100644
+10 −0
Original line number Diff line number Diff line
#ifndef MAIN_GLOBALS_H
#define MAIN_GLOBALS_H
#include <time.h>

extern unsigned control_c_pressed;
extern time_t global_now;

extern uint64_t global_tcb_count;

#endif
Loading