Article Figure 1 Figure 2 Figure 3 Figure 4
Figure 5 Figure 6 Figure 7 Figure 8 Figure 9
Listing 1 Listing 2 jul2007.tar

Listing 2 The create_graphs.pl Perl script

#!/usr/bin/perl -w

# $Id: create_graphs.pl,v 1.4 2006/09/29 11:38:02 mtsouk Exp $
#
# Please note that this code is
# provided without and guarantees.
#
# Programmer: Mihalis Tsoukalos
# Date: Wednesday 27 September 2006
#
# This Perl script creates the images
# using the data from parse_tcpshow.pl
#

# This library is for creating
# graphic images of the data.
use GD;
use GD::Graph::lines;
use GD::Graph::points;
use GD::Graph::bars3d;
use GD::Graph::pie3d;
use strict;

PACKET_TIME("packet_time.png");

TCP_PACKET_TIME("tcp_packet_time.png");

SOURCE_PORT_COUNT("source_port_count.png");

DEST_PORT_COUNT("dest_port_count.png");

PACKET_TYPE_COUNT("packet_type_count.png");

exit 0;


sub PACKET_TIME
{
    my $filename = shift;
    my $graph = new GD::Graph::lines(1600, 1200);
    my $input = "PACKET_TIME.data";
    my $line;
    my $data = GD::Graph::Data->new();

    open ( INPUT, " < $input " )
      or die "Cannot open $input: $!\n";
    
    while ( defined ($line=<INPUT>) )
    {
        my @row=();
        chomp $line;
        @row = split(/\s/, $line);
        $data->add_point(@row);
    }
    
    close ( INPUT )
      or die "Cannot close INPUT: $!\n";
    
    $graph->set(
        x_label => "Time",
        y_label => "Number of Packets",
        title   => "Number of packets per minute",
    );
    
    my $gr = $graph->plot($data)
      or die "Cannot plot: ".$graph->error.": $!\n";

    open ( PICTURE, " > $filename " )
      or die "Cannot open $filename: $!\n";
    binmode PICTURE;
    print PICTURE $gr->gif;
    close ( PICTURE )
      or die "Cannot close PICTURE: $!\n";
}

sub TCP_PACKET_TIME
{
    my $filename = shift;
    my $graph = new GD::Graph::points(1600, 1000);
    #
    # * * *
    # * * * I had to sort -n this file first.
    # * * * and remove : from time column.
    # * * *
    #
    my $input = "TCP_PACKET_TIME.data";
    my $line;
    my $data = GD::Graph::Data->new();
    
    open ( INPUT, " < $input " )
      or die "Cannot open $input: $!\n";
    
    while ( defined ($line=<INPUT>) )
    {
        my @row=();
        chomp $line;
        @row = split(/\s/, $line);
        $data->add_point(@row);
    }
    
    close ( INPUT )
      or die "Cannot close INPUT: $!\n";
    
    $graph->set(
        y_label            => "Time",
        x_label         => "TCP Packet serial number",
        x_label_skip    => 500,
        title           => "TCP Packet serial number versus Time",
    );
    
    my $gr = $graph->plot($data)
      or die "Cannot plot: ".$graph->error.": $!\n";

    open ( PICTURE, " > $filename " )
      or die "Cannot open $filename: $!\n";
    binmode PICTURE;
    print PICTURE $gr->gif;
    close ( PICTURE )
      or die "Cannot close PICTURE: $!\n";
}

sub SOURCE_PORT_COUNT
{
    my $filename = shift;
    my $graph = new GD::Graph::bars3d(1600, 1000);
    my $input = "SOURCE_PORT_COUNT.data";
    my $line;
    my $data = GD::Graph::Data->new();
    
    open ( INPUT, " < $input " )
      or die "Cannot open $input: $!\n";
    
    while ( defined ($line=<INPUT>) )
    {
        my @row=();
        chomp $line;
        @row = split(/\s/, $line);
        $data->add_point(@row);
    }
    
    close ( INPUT )
      or die "Cannot close INPUT: $!\n";
    
    $graph->set(
        x_label            => "SOURCE PORT",
        y_label         => "Times used",
        x_label_skip    => 1000,
        title           => "SOURCE PORT versus Times",
    );
    
    my $gr = $graph->plot($data)
      or die "Cannot plot: ".$graph->error.": $!\n";

    open ( PICTURE, " > $filename " )
      or die "Cannot open $filename: $!\n";
    binmode PICTURE;
    print PICTURE $gr->gif;
    close ( PICTURE )
      or die "Cannot close PICTURE: $!\n";
}

sub DEST_PORT_COUNT
{
    my $filename = shift;
    my $graph = new GD::Graph::bars3d(1600, 1000);
    my $input = "DEST_PORT_COUNT.data";
    my $line;
    my $data = GD::Graph::Data->new();
    
    open ( INPUT, " < $input " )
      or die "Cannot open $input: $!\n";
    
    while ( defined ($line=<INPUT>) )
    {
        my @row=();
        chomp $line;
        @row = split(/\s/, $line);
        $data->add_point(@row);
    }
    
    close ( INPUT )
      or die "Cannot close INPUT: $!\n";
    
    $graph->set(
        x_label            => "DEST PORT",
        y_label         => "Times used",
        x_label_skip    => 200,
        title           => "DESTINATION PORT versus Times",
    );
    
    my $gr = $graph->plot($data)
      or die "Cannot plot: ".$graph->error.": $!\n";

    open ( PICTURE, " > $filename " )
      or die "Cannot open $filename: $!\n";
    binmode PICTURE;
    print PICTURE $gr->gif;
    close ( PICTURE )
      or die "Cannot close PICTURE: $!\n";
}

sub PACKET_TYPE_COUNT
{
    my $filename = shift;
    my $graph = new GD::Graph::pie3d(800, 600);
    my $input = "PACKET_TYPE_COUNT.data";
    my $line;
    my $data = GD::Graph::Data->new();
    
    open ( INPUT, " < $input " )
      or die "Cannot open $input: $!\n";
    
    while ( defined ($line=<INPUT>) )
    {
        my @row=();
        chomp $line;
        @row = split(/\s/, $line);
        $data->add_point(@row);
    }
    
    close ( INPUT )
      or die "Cannot close INPUT: $!\n";
    
    $graph->set(
        title           => "PACKET TYPE Pie Chart",
    );
    
    my $gr = $graph->plot($data)
      or die "Cannot plot: ".$graph->error.": $!\n";

    open ( PICTURE, " > $filename " )
      or die "Cannot open $filename: $!\n";
    binmode PICTURE;
    print PICTURE $gr->gif;
    close ( PICTURE )
      or die "Cannot close PICTURE: $!\n";
}