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

bpf

parent 869c63a9
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -713,6 +713,12 @@ masscan_set_parameter(struct Masscan *masscan,
		masscan_set_parameter(masscan, "router-mac", "ff-ff-ff-ff-ff-ff");
		masscan->is_arp = 1; /* needs additional flag */
        LOG(5, "--arpscan\n");
    } else if (EQUALS("bpf", name)) {
        size_t len = strlen(value) + 1;
        if (masscan->bpf_filter)
            free(masscan->bpf_filter);
        masscan->bpf_filter = (char*)malloc(len);
        memcpy(masscan->bpf_filter, value, len);
    } else if (EQUALS("ping", name) || EQUALS("ping-sweep", name)) {
        /* Add ICMP ping request */
        struct Range range;
+2 −1
Original line number Diff line number Diff line
@@ -115,7 +115,8 @@ masscan_initialize_adapter(
                                            masscan->is_pfring, 
                                            masscan->is_sendq,
                                            masscan->nmap.packet_trace,
                                            masscan->is_offline);
                                            masscan->is_offline,
                                            masscan->bpf_filter);
    if (masscan->nic[index].adapter == 0) {
        fprintf(stderr, "adapter[%s].init: failed\n", ifname);
        return -1;
+4 −0
Original line number Diff line number Diff line
@@ -105,8 +105,12 @@ packet_trace(FILE *fp, const unsigned char *px, size_t length, unsigned is_sent)
                              );
                    break;
            }
            if (parsed.app_length)
            fprintf(fp, "%s (%5.4f) TCP  %-21s > %-21s %s %u-bytes\n", direction,
                    timestamp - global_timestamp_start, from, to, sz_type, parsed.app_length);
            else
            fprintf(fp, "%s (%5.4f) TCP  %-21s > %-21s %s\n", direction,
                    timestamp - global_timestamp_start, from, to, sz_type);
            break;
        case FOUND_IPV6:
            break;
+2 −0
Original line number Diff line number Diff line
@@ -174,6 +174,8 @@ struct Masscan

    unsigned char *http_user_agent;
    unsigned http_user_agent_length;

    char *bpf_filter;
};


+26 −2
Original line number Diff line number Diff line
@@ -591,7 +591,8 @@ rawsock_init_adapter(const char *adapter_name,
                     unsigned is_pfring, 
                     unsigned is_sendq,
                     unsigned is_packet_trace,
                     unsigned is_offline)
                     unsigned is_offline,
                     const char *bpf_filter)
{
    struct Adapter *adapter;
    char errbuf[PCAP_ERRBUF_SIZE];
@@ -713,6 +714,29 @@ rawsock_init_adapter(const char *adapter_name,
            return 0;
        } else
            LOG(1, "pcap:'%s': successfully opened\n", adapter_name);

        if (bpf_filter) {
            int err;
            struct bpf_program prog;

            err = pcap_compile(
                        adapter->pcap,
                        &prog,          /* object code, output of compile */
                        bpf_filter,         /* source code */
                        1,              /* optimize to go fast */
                        0);

            if (err) {
                pcap_perror(adapter->pcap, "pcap_compile()");
                exit(1);
            }

            err = pcap_setfilter(adapter->pcap, &prog);
            if (err < 0) {
                pcap_perror(adapter->pcap, "pcap_setfilter");
                exit(1);
            }
        }
    }

    /*----------------------------------------------------------------
@@ -811,7 +835,7 @@ rawsock_selftest_if(const char *ifname)
            (unsigned char)(router_ipv4>>0));


        adapter = rawsock_init_adapter(ifname, 0, 0, 0, 0);
        adapter = rawsock_init_adapter(ifname, 0, 0, 0, 0, 0);
        if (adapter == 0) {
            printf("adapter[%s]: failed\n", ifname);
            return -1;
Loading