kingp
kingp

Reputation:

CSV File Formatting

I wrote a perl script to output a text file filled with ip addresses and ports that i scanned into microsoft excel. Now that the data is in excel my boss wants me to organize the file in csv format such as

Server, port, protocol, random, random, random
ns1,    25,   tcp,      stuff,  stuff,  stuff

Can any one help me with this Please?

Code:

#!/usr/bin/perl

$input = `Cat /cygdrive/c/Windows/System32/test11.txt | grep -v 'SYN Stealth'`;
chomp input;
$output =" /cygdrive/c/Users/bpaul/Desktop/194.csv ";
if (! -e "$output")
{
`touch $output`;
}
open (OUTPUTFILE, ">$output") || die "Can't Open file $output";
print OUTPUTFILE "$input\n";
close (OUTPUTFILE);

Here is a piece of my file

Nmap scan report for 69.25.194.2 Host is up (0.072s latency). Not shown: 9992 filtered ports PORT STATE SERVICE 25/tcp open smtp
80/tcp open http
82/tcp open xfer
443/tcp open
https 4443/tcp closed
pharos 5666/tcp closed
nrpe 8080/tcp closed
http-proxy 9443/tcp closed tungsten-https

So far my code took my txt file and outputted it to excel now I need to format the data like this:

Desired Output:

Server, port, protocol, random, random, random
ns1,    25,   tcp,      stuff,  stuff,  stuff

Upvotes: 0

Views: 1894

Answers (1)

ikegami
ikegami

Reputation: 385799

I'm assuming you meant 69.25.194.2 when you said ns1.

use strict;
use warnings;

use Text::CSV_XS qw( );

my $csv = Text::CSV_XS->new({ binary => 1, eol => "\n" });

$csv->print(\*STDOUT, [qw(
    Server
    port
    protocol
    random
    random
    random
)]);

my $host = '[unknown]';

while (<>) {
    $host = $1 if /Nmap scan report for (\S+)/;

    my ($port, $protocol) = m{(\d+)/(\w+) (?:open|closed)/
        or next;

    $csv->print(\*STDOUT, [
        $host,
        $port,
        $protocol,
        'stuff',
        'stuff',
        'stuff',
    ]);
}

Usage:

grep -v 'SYN Stealth' /cygdrive/c/Windows/System32/test11.txt | perl to_csv.pl > /cygdrive/c/Users/bpaul/Desktop/194.csv

Text::CSV_XS

Update: Replaced hardcoded ns1 with address of scanned machine.

Update: Replaced generic usage with what the OP would use.

Upvotes: 4

Related Questions