Loading Makefile +3 −3 Original line number Diff line number Diff line Loading @@ -7,8 +7,8 @@ SYS := $(shell gcc -dumpmachine) # environment where things likely will work -- as well as anything # works on the bajillion of different Linux environments ifneq (, $(findstring linux, $(SYS))) LIBS = -lpcap -lm -lrt -rdynamic INCLUDES = -I. LIBS = -lpfring -lpcap -lm -lrt -rdynamic INCLUDES = -I. -I../PF_RING/userland/lib endif # MAC OS X Loading Loading @@ -44,7 +44,7 @@ endif # this works on llvm or real gcc CC = gcc DEFINES = DEFINES = -DPFRING CFLAGS = -g $(INCLUDES) $(DEFINES) -Wall -O3 -Wno-format .SUFFIXES: .c .cpp Loading src/logger.c +3 −1 Original line number Diff line number Diff line Loading @@ -10,8 +10,10 @@ int verbosity = 0; /* yea! a global variable!! */ void vLOG(int level, const char *fmt, va_list marker) { if (level <= verbosity) if (level <= verbosity) { vfprintf(stderr, fmt, marker); fflush(stderr); } } void LOG(int level, const char *fmt, ...) Loading src/main.c +7 −1 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ scanning_thread(void *v) double timestamp_start; unsigned *picker; LOG(1, "starting scanning thread...\n"); status_start(&status); throttler_start(&throttler, masscan->max_rate); Loading Loading @@ -162,6 +164,8 @@ initialize_adapter(struct Masscan *masscan, char *ifname; char ifname2[256]; LOG(1, "initializing adapter\n"); /* * ADAPTER/NETWORK-INTERFACE * Loading Loading @@ -296,6 +300,7 @@ initialize_adapter(struct Masscan *masscan, return -1; } LOG(1, "adapter initialization done.\n"); return 0; } Loading Loading @@ -434,6 +439,8 @@ main_scan(struct Masscan *masscan) */ pixie_begin_thread(scanning_thread, 0, masscan); LOG(1, "begin receive thread\n"); /* * Receive packets. This is where we catch any responses and print * them to the terminal. Loading @@ -450,7 +457,6 @@ main_scan(struct Masscan *masscan) unsigned dst; unsigned src; err = rawsock_recv_packet( masscan->adapter, &length, Loading src/rawsock.c +70 −4 Original line number Diff line number Diff line Loading @@ -10,7 +10,10 @@ #include "string_s.h" #ifdef PFRING #define _GNU_SOURCE #include "pfring.h" #endif #include <pcap.h> #ifdef WIN32 Loading Loading @@ -80,6 +83,9 @@ int pcap_sendqueue_queue(pcap_send_queue *queue, struct Adapter { #ifdef PFRING pfring *ring; #endif pcap_t *pcap; pcap_send_queue *sendq; }; Loading Loading @@ -289,7 +295,17 @@ rawsock_send_packet( const unsigned char *packet, unsigned length) { #ifdef PFRING int err; again: err = pfring_send(adapter->ring, packet, length, 1); if (err == PF_RING_ERROR_NO_TX_SLOT_AVAILABLE) goto again; return err; #else return pcap_sendpacket(adapter->pcap, packet, length); #endif } /*************************************************************************** Loading @@ -301,8 +317,11 @@ int rawsock_recv_packet( unsigned *usecs, const unsigned char **packet) { #ifdef PFRING #else struct pcap_pkthdr hdr; *packet = pcap_next(adapter->pcap, &hdr); if (*packet == NULL) Loading @@ -311,7 +330,7 @@ int rawsock_recv_packet( *length = hdr.caplen; *secs = hdr.ts.tv_sec; *usecs = hdr.ts.tv_usec; #endif return 0; } Loading Loading @@ -343,7 +362,7 @@ rawsock_send_probe( tcp_set_target(pkt, ip, port); if (sendq == 0) x = pcap_sendpacket(pcap, pkt->packet, pkt->length); x = rawsock_send_packet(adapter, pkt->packet, pkt->length); else { x = pcap_sendqueue_queue(sendq, &hdr, pkt->packet); if (x != 0) { Loading Loading @@ -405,7 +424,24 @@ const char *rawsock_win_name(const char *ifname) ***************************************************************************/ void rawsock_ignore_transmits(struct Adapter *adapter, const unsigned char *adapter_mac) { #ifndef WIN32 #ifdef PFRING /* typedef enum { rx_and_tx_direction = 0, rx_only_direction, tx_only_direction } packet_direction; */ int err; LOG(2, "pfring: setting direction\n"); err = pfring_set_direction(adapter->ring, rx_only_direction); if (err) { fprintf(stderr, "pfring: setdirection = %d\n", err); } else LOG(1, "pfring: don't receive transmits\n"); #elif defined(WIN32) int err; //printf("%u", PCAP_OPENFLAGS_NOCAPTURE_LOCAL); Loading Loading @@ -476,12 +512,42 @@ rawsock_init_adapter(const char *adapter_name) /* * Open the PCAP adapter */ #ifdef PFRING adapter->ring = pfring_open(adapter_name, 1500, 0); adapter->pcap = (pfring*)adapter->ring; if (adapter->ring == NULL) { perror(adapter_name); return 0; } else LOG(1, "%s: openned with pfring\n", adapter_name); pfring_set_application_name(adapter->ring, "masscan"); { uint32_t version; pfring_version(adapter->ring, &version); LOG(1, "PF_RING v%d.%d.%d\n", (version >> 16) & 0xFFFF, (version >> 8) & 0xFF, (version >> 0) & 0xFF); } { int err; err = pfring_enable_ring(adapter->ring); if (err != 0) { perror("enable PFRING"); return 0; } else LOG(1, "pfring: enabled\n"); } #else adapter->pcap = pcap_open_live( adapter_name, /* interface name */ 65536, /* max packet size */ 8, /* promiscuous mode */ 1000, /* read timeout in milliseconds */ errbuf); #endif if (adapter->pcap == NULL) { fprintf(stderr, "pcap_open_live(%s) error: %s\n", adapter_name, errbuf); return 0; Loading Loading
Makefile +3 −3 Original line number Diff line number Diff line Loading @@ -7,8 +7,8 @@ SYS := $(shell gcc -dumpmachine) # environment where things likely will work -- as well as anything # works on the bajillion of different Linux environments ifneq (, $(findstring linux, $(SYS))) LIBS = -lpcap -lm -lrt -rdynamic INCLUDES = -I. LIBS = -lpfring -lpcap -lm -lrt -rdynamic INCLUDES = -I. -I../PF_RING/userland/lib endif # MAC OS X Loading Loading @@ -44,7 +44,7 @@ endif # this works on llvm or real gcc CC = gcc DEFINES = DEFINES = -DPFRING CFLAGS = -g $(INCLUDES) $(DEFINES) -Wall -O3 -Wno-format .SUFFIXES: .c .cpp Loading
src/logger.c +3 −1 Original line number Diff line number Diff line Loading @@ -10,8 +10,10 @@ int verbosity = 0; /* yea! a global variable!! */ void vLOG(int level, const char *fmt, va_list marker) { if (level <= verbosity) if (level <= verbosity) { vfprintf(stderr, fmt, marker); fflush(stderr); } } void LOG(int level, const char *fmt, ...) Loading
src/main.c +7 −1 Original line number Diff line number Diff line Loading @@ -56,6 +56,8 @@ scanning_thread(void *v) double timestamp_start; unsigned *picker; LOG(1, "starting scanning thread...\n"); status_start(&status); throttler_start(&throttler, masscan->max_rate); Loading Loading @@ -162,6 +164,8 @@ initialize_adapter(struct Masscan *masscan, char *ifname; char ifname2[256]; LOG(1, "initializing adapter\n"); /* * ADAPTER/NETWORK-INTERFACE * Loading Loading @@ -296,6 +300,7 @@ initialize_adapter(struct Masscan *masscan, return -1; } LOG(1, "adapter initialization done.\n"); return 0; } Loading Loading @@ -434,6 +439,8 @@ main_scan(struct Masscan *masscan) */ pixie_begin_thread(scanning_thread, 0, masscan); LOG(1, "begin receive thread\n"); /* * Receive packets. This is where we catch any responses and print * them to the terminal. Loading @@ -450,7 +457,6 @@ main_scan(struct Masscan *masscan) unsigned dst; unsigned src; err = rawsock_recv_packet( masscan->adapter, &length, Loading
src/rawsock.c +70 −4 Original line number Diff line number Diff line Loading @@ -10,7 +10,10 @@ #include "string_s.h" #ifdef PFRING #define _GNU_SOURCE #include "pfring.h" #endif #include <pcap.h> #ifdef WIN32 Loading Loading @@ -80,6 +83,9 @@ int pcap_sendqueue_queue(pcap_send_queue *queue, struct Adapter { #ifdef PFRING pfring *ring; #endif pcap_t *pcap; pcap_send_queue *sendq; }; Loading Loading @@ -289,7 +295,17 @@ rawsock_send_packet( const unsigned char *packet, unsigned length) { #ifdef PFRING int err; again: err = pfring_send(adapter->ring, packet, length, 1); if (err == PF_RING_ERROR_NO_TX_SLOT_AVAILABLE) goto again; return err; #else return pcap_sendpacket(adapter->pcap, packet, length); #endif } /*************************************************************************** Loading @@ -301,8 +317,11 @@ int rawsock_recv_packet( unsigned *usecs, const unsigned char **packet) { #ifdef PFRING #else struct pcap_pkthdr hdr; *packet = pcap_next(adapter->pcap, &hdr); if (*packet == NULL) Loading @@ -311,7 +330,7 @@ int rawsock_recv_packet( *length = hdr.caplen; *secs = hdr.ts.tv_sec; *usecs = hdr.ts.tv_usec; #endif return 0; } Loading Loading @@ -343,7 +362,7 @@ rawsock_send_probe( tcp_set_target(pkt, ip, port); if (sendq == 0) x = pcap_sendpacket(pcap, pkt->packet, pkt->length); x = rawsock_send_packet(adapter, pkt->packet, pkt->length); else { x = pcap_sendqueue_queue(sendq, &hdr, pkt->packet); if (x != 0) { Loading Loading @@ -405,7 +424,24 @@ const char *rawsock_win_name(const char *ifname) ***************************************************************************/ void rawsock_ignore_transmits(struct Adapter *adapter, const unsigned char *adapter_mac) { #ifndef WIN32 #ifdef PFRING /* typedef enum { rx_and_tx_direction = 0, rx_only_direction, tx_only_direction } packet_direction; */ int err; LOG(2, "pfring: setting direction\n"); err = pfring_set_direction(adapter->ring, rx_only_direction); if (err) { fprintf(stderr, "pfring: setdirection = %d\n", err); } else LOG(1, "pfring: don't receive transmits\n"); #elif defined(WIN32) int err; //printf("%u", PCAP_OPENFLAGS_NOCAPTURE_LOCAL); Loading Loading @@ -476,12 +512,42 @@ rawsock_init_adapter(const char *adapter_name) /* * Open the PCAP adapter */ #ifdef PFRING adapter->ring = pfring_open(adapter_name, 1500, 0); adapter->pcap = (pfring*)adapter->ring; if (adapter->ring == NULL) { perror(adapter_name); return 0; } else LOG(1, "%s: openned with pfring\n", adapter_name); pfring_set_application_name(adapter->ring, "masscan"); { uint32_t version; pfring_version(adapter->ring, &version); LOG(1, "PF_RING v%d.%d.%d\n", (version >> 16) & 0xFFFF, (version >> 8) & 0xFF, (version >> 0) & 0xFF); } { int err; err = pfring_enable_ring(adapter->ring); if (err != 0) { perror("enable PFRING"); return 0; } else LOG(1, "pfring: enabled\n"); } #else adapter->pcap = pcap_open_live( adapter_name, /* interface name */ 65536, /* max packet size */ 8, /* promiscuous mode */ 1000, /* read timeout in milliseconds */ errbuf); #endif if (adapter->pcap == NULL) { fprintf(stderr, "pcap_open_live(%s) error: %s\n", adapter_name, errbuf); return 0; Loading