Loading src/main-conf.c +8 −15 Original line number Diff line number Diff line Loading @@ -128,15 +128,10 @@ masscan_echo(struct Masscan *masscan, FILE *fp) */ fprintf(fp, "# OUTPUT/REPORTING SETTINGS\n"); switch (masscan->nmap.format) { case Output_Interactive: fprintf(fp, "output-format = interactive\n"); break; case Output_List: fprintf(fp, "output-format = list\n"); break; case Output_XML: fprintf(fp, "output-format = xml\n"); break; case Output_Interactive: fprintf(fp, "output-format = interactive\n"); break; case Output_List: fprintf(fp, "output-format = list\n"); break; case Output_XML: fprintf(fp, "output-format = xml\n"); break; case Output_Binary: fprintf(fp, "output-format = binary\n"); break; default: fprintf(fp, "output-format = unknown(%u)\n", masscan->nmap.format); break; Loading Loading @@ -620,12 +615,10 @@ masscan_set_parameter(struct Masscan *masscan, const char *name, const char *val fprintf(stderr, "nmap(%s): OS scanning unsupported\n", name); exit(1); } else if (EQUALS("output-format", name)) { if (EQUALS("list", value)) masscan->nmap.format = Output_List; else if (EQUALS("interactive", value)) masscan->nmap.format = Output_Interactive; else if (EQUALS("xml", value)) masscan->nmap.format = Output_XML; if (EQUALS("list", value)) masscan->nmap.format = Output_List; else if (EQUALS("interactive", value)) masscan->nmap.format = Output_Interactive; else if (EQUALS("xml", value)) masscan->nmap.format = Output_XML; else if (EQUALS("binary", value)) masscan->nmap.format = Output_Binary; else { fprintf(stderr, "error: %s=%s\n", name, value); } Loading src/masscan.h +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ enum OutpuFormat { Output_XML, Output_ScriptKiddie, Output_Grepable, Output_Binary, Output_All, Output_List /* specific to Masscan */ }; Loading src/output.c +200 −163 Original line number Diff line number Diff line Loading @@ -126,6 +126,12 @@ open_rotate(struct Output *output, const char *filename) fprintf(fp, "<scaninfo type=\"%s\" protocol=\"%s\" />\r\n", "syn", "tcp" ); break; case Output_Binary: fwrite( "mass" "can/" "1.0\0", 1, 12, fp); break; default: LOG(0, "output: ERROR: unknown format\n"); exit(1); } return fp; Loading Loading @@ -170,6 +176,12 @@ close_rotate(struct Output *out, FILE *fp) out->open_count + out->closed_count ); break; case Output_Binary: fwrite( "mass" "can/" "1.0\0", 1, 12, fp); break; default: LOG(0, "output: ERROR: unknown format\n"); exit(1); } out->open_count = 0; Loading Loading @@ -432,8 +444,8 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign return; } if (masscan->nmap.format == Output_List || masscan->nmap.format == Output_All) { switch (masscan->nmap.format) { case Output_List: fprintf(fp, "%s tcp %u %u.%u.%u.%u %u\n", status_string(status), port, Loading @@ -443,8 +455,9 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign (ip>> 0)&0xFF, (unsigned)global_now ); } if (masscan->nmap.format == Output_XML || masscan->nmap.format == Output_All) { break; case Output_XML: { char reason_buffer[128]; fprintf(fp, "<host endtime=\"%u\">" "<address addr=\"%u.%u.%u.%u\" addrtype=\"ipv4\"/>" Loading @@ -466,6 +479,30 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign ttl ); } break; case Output_Binary: { struct { unsigned timestamp; unsigned ip; unsigned short port; unsigned char reason; unsigned char ttl; } foo; foo.timestamp = (unsigned)global_now; foo.ip = ip; foo.port = (unsigned short)port; foo.reason = (unsigned char)reason; foo.ttl = (unsigned char)ttl; fwrite(&foo, 1, 12, fp); } break; default: LOG(0, "output: ERROR: unknown format\n"); exit(1); } } src/rawsock.c +19 −6 Original line number Diff line number Diff line Loading @@ -252,6 +252,11 @@ extern unsigned tcp_checksum(struct TcpPacket *pkt); /*************************************************************************** * wrapper for libpcap's sendpacket * * PORTABILITY: WINDOWS and PF_RING * For performance, Windows and PF_RING can queue up multiple packets, then * transmit them all in a chunk. If we stop and wait for a bit, we need * to flush the queue to force packets to be transmitted immediately. ***************************************************************************/ int rawsock_send_packet( Loading @@ -260,7 +265,7 @@ rawsock_send_packet( unsigned length, unsigned flush) { /* PF_RING */ if (adapter->ring) { int err = PF_RING_ERROR_NO_TX_SLOT_AVAILABLE; Loading @@ -270,7 +275,10 @@ rawsock_send_packet( if (err < 0) LOG(1, "pfring:xmit: ERROR %d\n", err); return err; } else if (adapter->sendq) { } /* WINDOWS PCAP */ if (adapter->sendq) { int err; struct pcap_pkthdr hdr; hdr.len = length; Loading @@ -291,13 +299,18 @@ rawsock_send_packet( ; //printf("+%u\n", count++); if (flush) { pcap_sendqueue_transmit(adapter->pcap, adapter->sendq, 0); /* Dude, I totally forget why this step is necessary. I vaguely * remember there's a good reason for it though */ pcap_sendqueue_destroy(adapter->sendq); adapter->sendq = pcap_sendqueue_alloc(65536); } return 0; } else { return pcap_sendpacket(adapter->pcap, packet, length); } /* LIBPCAP */ return pcap_sendpacket(adapter->pcap, packet, length); } extern unsigned control_c_pressed; Loading Loading
src/main-conf.c +8 −15 Original line number Diff line number Diff line Loading @@ -128,15 +128,10 @@ masscan_echo(struct Masscan *masscan, FILE *fp) */ fprintf(fp, "# OUTPUT/REPORTING SETTINGS\n"); switch (masscan->nmap.format) { case Output_Interactive: fprintf(fp, "output-format = interactive\n"); break; case Output_List: fprintf(fp, "output-format = list\n"); break; case Output_XML: fprintf(fp, "output-format = xml\n"); break; case Output_Interactive: fprintf(fp, "output-format = interactive\n"); break; case Output_List: fprintf(fp, "output-format = list\n"); break; case Output_XML: fprintf(fp, "output-format = xml\n"); break; case Output_Binary: fprintf(fp, "output-format = binary\n"); break; default: fprintf(fp, "output-format = unknown(%u)\n", masscan->nmap.format); break; Loading Loading @@ -620,12 +615,10 @@ masscan_set_parameter(struct Masscan *masscan, const char *name, const char *val fprintf(stderr, "nmap(%s): OS scanning unsupported\n", name); exit(1); } else if (EQUALS("output-format", name)) { if (EQUALS("list", value)) masscan->nmap.format = Output_List; else if (EQUALS("interactive", value)) masscan->nmap.format = Output_Interactive; else if (EQUALS("xml", value)) masscan->nmap.format = Output_XML; if (EQUALS("list", value)) masscan->nmap.format = Output_List; else if (EQUALS("interactive", value)) masscan->nmap.format = Output_Interactive; else if (EQUALS("xml", value)) masscan->nmap.format = Output_XML; else if (EQUALS("binary", value)) masscan->nmap.format = Output_Binary; else { fprintf(stderr, "error: %s=%s\n", name, value); } Loading
src/masscan.h +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ enum OutpuFormat { Output_XML, Output_ScriptKiddie, Output_Grepable, Output_Binary, Output_All, Output_List /* specific to Masscan */ }; Loading
src/output.c +200 −163 Original line number Diff line number Diff line Loading @@ -126,6 +126,12 @@ open_rotate(struct Output *output, const char *filename) fprintf(fp, "<scaninfo type=\"%s\" protocol=\"%s\" />\r\n", "syn", "tcp" ); break; case Output_Binary: fwrite( "mass" "can/" "1.0\0", 1, 12, fp); break; default: LOG(0, "output: ERROR: unknown format\n"); exit(1); } return fp; Loading Loading @@ -170,6 +176,12 @@ close_rotate(struct Output *out, FILE *fp) out->open_count + out->closed_count ); break; case Output_Binary: fwrite( "mass" "can/" "1.0\0", 1, 12, fp); break; default: LOG(0, "output: ERROR: unknown format\n"); exit(1); } out->open_count = 0; Loading Loading @@ -432,8 +444,8 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign return; } if (masscan->nmap.format == Output_List || masscan->nmap.format == Output_All) { switch (masscan->nmap.format) { case Output_List: fprintf(fp, "%s tcp %u %u.%u.%u.%u %u\n", status_string(status), port, Loading @@ -443,8 +455,9 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign (ip>> 0)&0xFF, (unsigned)global_now ); } if (masscan->nmap.format == Output_XML || masscan->nmap.format == Output_All) { break; case Output_XML: { char reason_buffer[128]; fprintf(fp, "<host endtime=\"%u\">" "<address addr=\"%u.%u.%u.%u\" addrtype=\"ipv4\"/>" Loading @@ -466,6 +479,30 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign ttl ); } break; case Output_Binary: { struct { unsigned timestamp; unsigned ip; unsigned short port; unsigned char reason; unsigned char ttl; } foo; foo.timestamp = (unsigned)global_now; foo.ip = ip; foo.port = (unsigned short)port; foo.reason = (unsigned char)reason; foo.ttl = (unsigned char)ttl; fwrite(&foo, 1, 12, fp); } break; default: LOG(0, "output: ERROR: unknown format\n"); exit(1); } }
src/rawsock.c +19 −6 Original line number Diff line number Diff line Loading @@ -252,6 +252,11 @@ extern unsigned tcp_checksum(struct TcpPacket *pkt); /*************************************************************************** * wrapper for libpcap's sendpacket * * PORTABILITY: WINDOWS and PF_RING * For performance, Windows and PF_RING can queue up multiple packets, then * transmit them all in a chunk. If we stop and wait for a bit, we need * to flush the queue to force packets to be transmitted immediately. ***************************************************************************/ int rawsock_send_packet( Loading @@ -260,7 +265,7 @@ rawsock_send_packet( unsigned length, unsigned flush) { /* PF_RING */ if (adapter->ring) { int err = PF_RING_ERROR_NO_TX_SLOT_AVAILABLE; Loading @@ -270,7 +275,10 @@ rawsock_send_packet( if (err < 0) LOG(1, "pfring:xmit: ERROR %d\n", err); return err; } else if (adapter->sendq) { } /* WINDOWS PCAP */ if (adapter->sendq) { int err; struct pcap_pkthdr hdr; hdr.len = length; Loading @@ -291,13 +299,18 @@ rawsock_send_packet( ; //printf("+%u\n", count++); if (flush) { pcap_sendqueue_transmit(adapter->pcap, adapter->sendq, 0); /* Dude, I totally forget why this step is necessary. I vaguely * remember there's a good reason for it though */ pcap_sendqueue_destroy(adapter->sendq); adapter->sendq = pcap_sendqueue_alloc(65536); } return 0; } else { return pcap_sendpacket(adapter->pcap, packet, length); } /* LIBPCAP */ return pcap_sendpacket(adapter->pcap, packet, length); } extern unsigned control_c_pressed; Loading