Net::P0f::Backend::Socket - Back-end for C<Net::P0f> that links to the P0f library


Net-P0f documentation Contained in the Net-P0f distribution.

Index


Code Index:

NAME

Top

Net::P0f::Backend::Socket - Back-end for Net::P0f that links to the P0f library

VERSION

Top

Version 0.01

SYNOPSIS

Top

    use Net::P0f;

    my $p0f = Net::P0f->new(backend => 'socket', socket_path => '/var/run/p0f.sock');
    ...

DESCRIPTION

Top

This module is a back-end helper for Net::P0f. It provides an interface to pilot the p0f(1) utility using its local-socket.

See Net::P0f for more general information and examples.

METHODS

Top

init()

This method initialize the backend-specific part of the object. It is automatically called by Net::P0f during the object creation.

Options

  • socket_path - indicates the path to the socket which can be used to query a P0f process.

run()
encode_p0f_query()
decode_p0f_response()

DIAGNOSTICS

Top

These messages are classified as follows (listed in increasing order of desperatin):

Please set the path to the socket with the 'socket_path' option

(F) You must set the socket_path option with the path to the socket.

Unknown option '%s'

(W) You called an accesor which does not correspond to a known option.

SEE ALSO

Top

Net::P0f

AUTHOR

Top

Sébastien Aperghis-Tramoni <sebastien@aperghis.net>

BUGS

Top

Please report any bugs or feature requests to bug-net-p0f-xs@rt.cpan.org, or through the web interface at https://rt.cpan.org/NoAuth/ReportBug.html?Queue=Net-P0f. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.

ACKNOWLEDGEMENTS

Top

COPYRIGHT & LICENSE

Top


Net-P0f documentation Contained in the Net-P0f distribution.
package Net::P0f::Backend::Socket;
use strict;
use Carp;
use Socket;

{ no strict;
  $VERSION = 0.02;
  @ISA = qw(Net::P0f);
}

sub init {
    my $self = shift;
    my %opts = @_;

    # declare my specific options
    #$self->{options}{XXX} = '';
    
    # initialize my options
    for my $opt (keys %opts) {
        exists $self->{options}{$opt} ?
        ( $self->{options}{$opt} = $opts{$opt} and delete $opts{$opt} )
        : carp "warning: Unknown option '$opt'";
    }
}

sub run {
    my $self = shift;
    die "*** ",(caller(0))[3]," not implemented ***\n";
    croak "fatal: Please set the path to the socket with the 'socket_path' option" 
      unless $self->{options}{socket_path};
}


# 
# P0f types <-> pack() 
# ====================
#   _u8     C    unsigned char
#   _u16    S    unsigned short
#   _u32    I    unsigned int
#   _u64    Q    unsigned quad
#
#   _s8     c    signed char
#   _s16    s    signed short
#   _s32    i    signed int
#   _s64    q    signed quad
# 

sub encode_p0f_query {
    my $magic = 0x0defaced;
    my($id,$src_addr,$dest_addr,$src_port,$dest_port) = @_;
    $src_addr = inet_aton($src_addr);
    $dest_addr = inet_aton($dest_addr);
    return pack('IIIISS', $magic,$id,$src_addr,$dest_addr,$src_port,$dest_port)
}

sub decode_p0f_response {
    my $packet = shift;
    my($magic,$id,$type,$genre,$detail,$dist,$link,$tos,$fw,$nat,$real,$score,
        $mflags,$uptime) = unpack('IICA20A40cA30A30CCCsSi', $packet);
    return ($id,$type,$genre,$detail,$dist,$link,$tos,$fw,$nat,
        $real,$score,$mflags,$uptime)
}

1; # End of Net::P0f::Backend::Socket