Commit 49944128 authored by robertdavidgraham's avatar robertdavidgraham
Browse files

xml output

parent dcd60b63
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -134,10 +134,15 @@ masscan_echo(struct Masscan *masscan, FILE *fp)
    case Output_List:
        fprintf(fp, "output-format = list\n");
        break;
    case Output_XML:
        fprintf(fp, "output-format = xml\n");
        break;
    default:
        fprintf(fp, "output-format = unknown(%u)\n", masscan->nmap.format);
        break;
    }
    fprintf(fp, "output-status = %s\n",
            masscan->nmap.open_only?"open":"all");
    fprintf(fp, "output-filename = %s\n", masscan->nmap.filename);
    if (masscan->nmap.append)
        fprintf(fp, "output-append = true\n");
@@ -604,6 +609,10 @@ masscan_set_parameter(struct Masscan *masscan, const char *name, const char *val
        exit(1);
    } else if (EQUALS("open", name)) {
        masscan->nmap.open_only = 1;
    } else if (EQUALS("output-status", name)) {
        if (EQUALS("open", value))
            masscan->nmap.open_only = 1;
        
    } else if (EQUALS("osscan-limit", name)) {
        fprintf(stderr, "nmap(%s): OS scanning unsupported\n", name);
        exit(1);
@@ -615,6 +624,8 @@ masscan_set_parameter(struct Masscan *masscan, const char *name, const char *val
            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 {
            fprintf(stderr, "error: %s=%s\n", name, value);
        }
+3 −1
Original line number Diff line number Diff line
@@ -118,7 +118,9 @@ transmit_thread(void *v) /*aka. scanning_thread() */
                    ip, 
                    port, 
                    syn_hash(ip, port), 
                    pkt_template);
                    !batch_size,        /* flush transmit queue on last packet */
                    pkt_template
                    );


            i++;
+11 −5
Original line number Diff line number Diff line
@@ -424,9 +424,15 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign
        break;
    case Port_Closed:
        out->closed_count++;
        if (masscan->nmap.open_only)
            return;
        break;
    default:
        if (masscan->nmap.open_only)
            return;
    }


    if (masscan->nmap.format == Output_List || masscan->nmap.format == Output_All) {
        fprintf(fp, "%s tcp %u %u.%u.%u.%u %u\n",
            status_string(status),
@@ -441,6 +447,7 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign
    if (masscan->nmap.format == Output_XML || masscan->nmap.format == Output_All) {
        char reason_buffer[128];
        fprintf(fp, "<host endtime=\"%u\">"
                     "<address addr=\"%u.%u.%u.%u\" addrtype=\"ipv4\"/>"
                     "<ports>"
                      "<port protocol=\"tcp\" portid=\"%u\">"
                       "<state state=\"%s\" reason=\"%s\" reason_ttl=\"%u\"/>"
@@ -449,15 +456,14 @@ output_report(struct Output *out, int status, unsigned ip, unsigned port, unsign
                    "</host>"  
                    "\r\n",
            (unsigned)global_now,
            port,
            status_string(status),
            reason_string(reason, reason_buffer, sizeof(reason_buffer)),
            ttl,
            (ip>>24)&0xFF,
            (ip>>16)&0xFF,
            (ip>> 8)&0xFF,
            (ip>> 0)&0xFF,
            (unsigned)global_now
            port,
            status_string(status),
            reason_string(reason, reason_buffer, sizeof(reason_buffer)),
            ttl
            );
    }

+3 −3
Original line number Diff line number Diff line
@@ -126,7 +126,7 @@ int arp_resolve_sync(struct Adapter *adapter,
    /*
     * Now loop for a few seconds looking for the response
     */
    rawsock_send_packet(adapter, arp_packet, 60);
    rawsock_send_packet(adapter, arp_packet, 60, 1);
    start = time(0);
    i = 0;
    for (;;) {
@@ -138,7 +138,7 @@ int arp_resolve_sync(struct Adapter *adapter,

        if (time(0) != start) {
            start = time(0);
            rawsock_send_packet(adapter, arp_packet, 60);
            rawsock_send_packet(adapter, arp_packet, 60, 1);
            if (i++ >= 10)
                break; /* timeout */
        }
@@ -267,7 +267,7 @@ int arp_response(struct Adapter *adapter, unsigned my_ip, const unsigned char *m
    /*
     * Now transmit the packet
     */
    rawsock_send_packet(adapter, arp_packet, 60);
    rawsock_send_packet(adapter, arp_packet, 60, 1);

    return 0;
}
+11 −4
Original line number Diff line number Diff line
@@ -249,6 +249,7 @@ char *adapter_from_index(unsigned index)
extern unsigned ip_checksum(struct TcpPacket *pkt);
extern unsigned tcp_checksum(struct TcpPacket *pkt);


/***************************************************************************
 * wrapper for libpcap's sendpacket
 ***************************************************************************/
@@ -256,14 +257,15 @@ int
rawsock_send_packet(
    struct Adapter *adapter,
    const unsigned char *packet,
    unsigned length)
    unsigned length,
    unsigned flush)
{

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

        while (err == PF_RING_ERROR_NO_TX_SLOT_AVAILABLE) {
            err = PFRING.send(adapter->ring, packet, length, 0);
            err = PFRING.send(adapter->ring, packet, length, (unsigned char)flush);
        }
	if (err < 0)
		LOG(1, "pfring:xmit: ERROR %d\n", err);
@@ -287,6 +289,11 @@ rawsock_send_packet(
			//exit(1);
		} else
			; //printf("+%u\n", count++);
        if (flush) {
            pcap_sendqueue_transmit(adapter->pcap, adapter->sendq, 0);
   			pcap_sendqueue_destroy(adapter->sendq);
			adapter->sendq =  pcap_sendqueue_alloc(65536);
        }
        return 0;
    } else {
        return pcap_sendpacket(adapter->pcap, packet, length);
@@ -353,7 +360,7 @@ int rawsock_recv_packet(
void
rawsock_send_probe(
    struct Adapter *adapter,
    unsigned ip, unsigned port, unsigned seqno,
    unsigned ip, unsigned port, unsigned seqno, unsigned flush,
    struct TcpPacket *pkt)
{
    /*
@@ -364,7 +371,7 @@ rawsock_send_probe(
    /*
     * Send it
     */
    rawsock_send_packet(adapter, pkt->packet, pkt->length);
    rawsock_send_packet(adapter, pkt->packet, pkt->length, flush);
	
    /*
     * Verify I'm doing the checksum correctly ('cause I ain't, I got
Loading