Commit 4a17ef8e authored by robertdavidgraham's avatar robertdavidgraham
Browse files

pfring

parent 8feb320c
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -56,7 +56,7 @@ scanning_thread(void *v)
    double timestamp_start;
    unsigned *picker;

    LOG(1, "starting scanning thread...\n");
    LOG(1, "xmit: starting transmit thread...\n");

    status_start(&status);
    throttler_start(&throttler, masscan->max_rate);
@@ -74,6 +74,7 @@ scanning_thread(void *v)
    /*
     * the main loop
     */
    LOG(3, "xmit: starting main loop\n");
	for (i=masscan->resume.index; i<masscan->lcg.m; ) {
        uint64_t batch_size;

@@ -98,6 +99,9 @@ scanning_thread(void *v)
			ip = rangelist_pick2(&masscan->targets, seed%count_ips, picker);
			port = rangelist_pick(&masscan->ports, seed/count_ips);

            /* Print packet if debugging */
            if (packet_trace)
                tcpkt_trace(pkt_template, ip, port, timestamp_start);
            /* Send the probe */
			rawsock_send_probe(masscan->adapter, ip, port, pkt_template);

@@ -112,9 +116,6 @@ scanning_thread(void *v)
			if ((i & status.timer) == status.timer) 
                status_print(&status, i, m);

            /* Print packet if debugging */
            if (packet_trace)
                tcpkt_trace(pkt_template, ip, port, timestamp_start);
        }

        if (control_c_pressed) {
@@ -250,7 +251,9 @@ initialize_adapter(struct Masscan *masscan,
        fprintf(stderr, "adapter[%s].init: failed\n", ifname);
        return -1;
    }
    LOG(3, "rawsock: ignoring transmits\n");
    rawsock_ignore_transmits(masscan->adapter, adapter_mac);
    LOG(3, "rawsock: initialization done\n");

    /*
     * ROUTER MAC ADDRESS
@@ -267,6 +270,7 @@ initialize_adapter(struct Masscan *masscan,
        unsigned router_ipv4;
        int err;

        LOG(1, "rawsock: looking for default gateway\n");
        err = rawsock_get_default_gateway(ifname, &router_ipv4);
        if (err == 0) {
            LOG(2, "auto-detected: router-ip=%u.%u.%u.%u\n",
+24 −15
Original line number Diff line number Diff line
@@ -261,11 +261,13 @@ rawsock_send_packet(
{

    if (adapter->ring) {
        int err = 0;
        int err = PF_RING_ERROR_NO_TX_SLOT_AVAILABLE;

        while (err != PF_RING_ERROR_NO_TX_SLOT_AVAILABLE) {
        while (err == PF_RING_ERROR_NO_TX_SLOT_AVAILABLE) {
            err = PFRING.send(adapter->ring, packet, length, 1);
        }
	if (err < 0)
		LOG(1, "pfring:xmit: ERROR %d\n", err);
        return err;
    } else if (adapter->sendq) {
        int err;
@@ -415,12 +417,17 @@ const char *rawsock_win_name(const char *ifname)
void rawsock_ignore_transmits(struct Adapter *adapter, const unsigned char *adapter_mac)
{

    if (adapter == 0)
        return;

    if (adapter->ring) {
        /* don't do anything, we've already done it above */
        return;
    }


#if !defined(WIN32)
    {
    if (adapter->pcap) {
        int err;
      
        //printf("%u", PCAP_OPENFLAGS_NOCAPTURE_LOCAL);
@@ -430,7 +437,7 @@ void rawsock_ignore_transmits(struct Adapter *adapter, const unsigned char *adap
        }
    }
#else
    {
    if (adapter->pcap) {
        int err;
        char filter[256];
        struct bpf_program prog;
@@ -496,7 +503,7 @@ rawsock_init_adapter(const char *adapter_name, unsigned is_pfring, unsigned is_s
        unsigned version;

        LOG(2, "pfring:'%s': opening...\n", adapter_name);
	    adapter->ring = PFRING.open(adapter_name, 1500, 0);
	    adapter->ring = PFRING.open(adapter_name, 1500, 0); //PF_RING_REENTRANT);
	    adapter->pcap = (pcap_t*)adapter->ring;
        if (adapter->ring == NULL) {
            LOG(0, "pfring:'%s': OPEN ERROR: %s\n", adapter_name, strerror_x(errno));
@@ -511,6 +518,14 @@ rawsock_init_adapter(const char *adapter_name, unsigned is_pfring, unsigned is_s
                (version >> 8) & 0xFF,
                (version >> 0) & 0xFF);

        LOG(2, "pfring:'%s': setting direction\n", adapter_name);
        err = PFRING.set_direction(adapter->ring, rx_only_direction);
        if (err) {
            fprintf(stderr, "pfring:'%s': setdirection = %d\n", adapter_name, err);
        } else
            LOG(2, "pfring:'%s': direction success\n", adapter_name);

	LOG(2, "pfring:'%s': activating\n", adapter_name);
	err = PFRING.enable_ring(adapter->ring);
	if (err != 0) {
            LOG(0, "pfring: '%s': ENABLE ERROR: %s\n", adapter_name, strerror_x(errno));
@@ -518,14 +533,8 @@ rawsock_init_adapter(const char *adapter_name, unsigned is_pfring, unsigned is_s
            adapter->ring = 0;
		    return 0;
	} else
		    LOG(1, "pfring:'%s': succesfully enabled enabled\n", adapter_name);
	    LOG(1, "pfring:'%s': succesfully eenabled\n", adapter_name);

        LOG(2, "pfring:'%s': setting direction\n", adapter_name);
        err = PFRING.set_direction(adapter->ring, rx_only_direction);
        if (err) {
            fprintf(stderr, "pfring:'%s': setdirection = %d\n", err);
        } else
            LOG(2, "pfring:'%s': direction success\n");
        return adapter;

    } else {