Commit 00e3471c authored by robertdavidgraham's avatar robertdavidgraham
Browse files

udp scan

parent c90d5f2a
Loading
Loading
Loading
Loading
+13 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
#include "string_s.h"
#include "logger.h"
#include "proto-banner1.h"
#include "templ-payloads.h"

#include <ctype.h>
#include <limits.h>
@@ -705,6 +706,18 @@ masscan_set_parameter(struct Masscan *masscan,
    } else if (EQUALS("nmap", name)) {
        print_nmap_help();
        exit(1);
    } else if (EQUALS("nmap-payloads", name)) {
        FILE *fp;
        int err;
        err = fopen_s(&fp, value, "rt");
        if (err || fp == NULL) {
            perror(value);
        } else {
            if (masscan->payloads == NULL)
                masscan->payloads = payloads_create();
            payloads_read_file(fp, value, masscan->payloads);
            fclose(fp);
        }
    } else if (EQUALS("offline", name)) {
        /* Run in "offline" mode where it thinks it's sending packets, but
         * it's not */
+14 −1
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@
#include "pixie-timer.h"        /* portable time functions */
#include "pixie-threads.h"      /* portable threads */
#include "proto-preprocess.h"   /* quick parse of packets */
#include "templ-payloads.h"     /* UDP packet payloads */

#include <string.h>
#include <time.h>
@@ -716,9 +717,16 @@ main_scan(struct Masscan *masscan)
                tmplset,
                adapter_ip,
                adapter_mac,
                router_mac);
                router_mac,
                masscan->payloads);
    masscan->pkt_template = tmplset;
    
    /*
     * trim the nmap UDP payloads down to only those ports we are using. This 
     * makes lookups faster at high packet rates.
     */
    payloads_trim(masscan->payloads, &masscan->ports);

    /*
     * Reconfigure the packet template according to command-line options
     */
@@ -727,6 +735,9 @@ main_scan(struct Masscan *masscan)
    if (masscan->nmap.ttl)
        template_set_ttl(tmplset, masscan->nmap.ttl);

    


    /*
     * Read back what we've set
     */
@@ -845,6 +856,7 @@ int main(int argc, char *argv[])
    masscan->adapter_port = 0x10000; /* value not set */
    masscan->shard.one = 1;
    masscan->shard.of = 1;
    masscan->payloads = payloads_create();
    strcpy_s(   masscan->rotate_directory,
                sizeof(masscan->rotate_directory),
                ".");
@@ -925,6 +937,7 @@ int main(int argc, char *argv[])
         */
        {
            int x = 0;
            x += payloads_selftest();
            x += blackrock_selftest();
            x += rawsock_selftest();
            x += randlcg_selftest();
+2 −0
Original line number Diff line number Diff line
@@ -171,6 +171,8 @@ struct Masscan
    struct {
        unsigned timeout;
    } tcb;

    struct NmapPayloads *payloads;
};


+25 −7
Original line number Diff line number Diff line
@@ -14,6 +14,22 @@

#define REGRESS(x) if (!(x)) return (fprintf(stderr, "regression failed %s:%u\n", __FILE__, __LINE__)|1)


/***************************************************************************
 ***************************************************************************/
int
rangelist_is_contains(const struct RangeList *task, unsigned number)
{
    unsigned i;
    for (i=0; i<task->count; i++) {
        struct Range *range = &task->list[i];

        if (range->begin <= number && number <= range->end)
            return 1;
    }
    return 0;
}

/***************************************************************************
 * ???
 ***************************************************************************/
@@ -511,7 +527,7 @@ regress_pick2()

/***************************************************************************
 ***************************************************************************/
void
const char *
rangelist_parse_ports(struct RangeList *ports, const char *string)
{
    char *p = (char*)string;
@@ -552,10 +568,8 @@ rangelist_parse_ports(struct RangeList *ports, const char *string)
            p += 2;
        }
        
        if (!isdigit(p[0] & 0xFF)) {
            fprintf(stderr, "CONF: bad port charactern = 0x%02x\n", p[0]);
            exit(1);
        }
        if (!isdigit(p[0] & 0xFF))
            break;

        port = strtoul(p, &p, 0);
        end = port;
@@ -563,8 +577,6 @@ rangelist_parse_ports(struct RangeList *ports, const char *string)
            p++;
            end = strtoul(p, &p, 0);
        }
        if (*p == ',')
            p++;

        if (port > 0xFFFF || end > 0xFFFF || end < port) {
            fprintf(stderr, "CONF: bad ports: %u-%u\n", port, end);
@@ -572,7 +584,13 @@ rangelist_parse_ports(struct RangeList *ports, const char *string)
        } else {
            rangelist_add_range(ports, port+proto_offset, end+proto_offset);
        }
        if (*p == ',')
            p++;
        else
            break;
    }

    return p;
}


+2 −1
Original line number Diff line number Diff line
@@ -25,11 +25,12 @@ struct RangeList
void rangelist_add_range(struct RangeList *task, unsigned begin, unsigned end);
void rangelist_remove_range(struct RangeList *task, unsigned begin, unsigned end);
void rangelist_remove_range2(struct RangeList *task, struct Range range);
int rangelist_is_contains(const struct RangeList *task, unsigned number);

struct Range range_parse_ipv4(const char *line, unsigned *inout_offset, unsigned max);
uint64_t rangelist_count(struct RangeList *targets);
unsigned rangelist_pick(struct RangeList *targets, uint64_t i);
void rangelist_parse_ports(struct RangeList *ports, const char *string);
const char *rangelist_parse_ports(struct RangeList *ports, const char *string);

void rangelist_free(struct RangeList *list);

Loading