NAME

Net::Inspect - library for inspection of data on various network layers

SYNOPSIS

    use Net::Pcap 'pcap_loop';
    use Net::Inspect::L2::Pcap;
    use Net::Inspect::L3::IP;
    use Net::Inspect::L4::TCP;
    use Net::Inspect::L7::HTTP;
    use Net::Inspect::L7::HTTP::Request::InspectChain;
    use Net::Inspect::Debug;

    my $pcap = Net::Pcap->new...
    ...
    my $l7 = Net::Inspect::L7::HTTP->new;
    my $l4 = Net::Inspect::L4::TCP->new($l7);
    my $l3 = Net::Inspect::L3::IP->new($l4);
    my $l2 = Net::Inspect::L2::Pcap->new($pcap,$l3);

    pcap_loop($pcap,-1,sub {
	my (undef,$hdr,$data) = @_;
	return $l2->pktin($data,$hdr);
    });

DESCRIPTION

The idea of Net::Inspect is to plug various layers of network inspection together to analyze data. This is kind of what wireshark or IDS do, exept this is in perl and therefore slower to execute but faster to develop and maybe more flexibel too.

One can start analysis on some level and stop it at any higher level. There are various useful tools in tools/ which make use of this library:

tcpflow

gets data from pcap file or does live capture and extracts tcp connections into separate files.

httpflow

gets data from pcap file or does live capture and extracts http requests into separate files. Does request unchunking and decompression. Works with persistant and with pipelined HTTP connections.

http_inspection_proxy

simple http(s) proxy with the ability to inspect and transform requests. Contrary to tcpflow and httpflow it starts analysis at the TCP layer, not at the pcap layer.

Because of non-blocking DNS lookups and connects and DNS caching the proxy is fast enough to be used in simple production setups. It can also store each http connections as a single pcap file for more analysis.

Currently the following modules are implemented:

Net::Inspect::L2::Pcap

reads from pcap layer

Net::Inspect::L3::IP

processes raw IP packets, does defragmentation.

Net::Inspect::L4::TCP

handles TCP connections, e.g. connection setup and shutdown and reordering of packets.

Net::Inspect::L4::UDP

handles UDP packets. Can aggregate udp packets in virtual connections.

Net::Inspect::L5::GuessProtocol

tries to guess the higher level protocol from TCP connections.

Net::Inspect::L7::HTTP

handles HTTP connections. Plugable into Net::Inspect::L5::GuessProtocol.

Net::Inspect::L5::Null

handles connections which don't transport any data. Plugable into Net::Inspect::L5::GuessProtocol.

Net::Inspect::L5::Unknown

used together with Net::Inspect::L5::GuessProtocol as a fallback if no other protocol handler matched.

BUGS

Probably still a lot. The HTTP part was tested with a lot of real-life traffic, so it should be kind of stable. There is currently no support for IPv6.

SEE ALSO

Net::Sharktools Net::Analysis

AUTHOR

Steffen Ullrich, <sullr@cpan.org>

COPYRIGHT

Copyright 2011-2013 Steffen Ullrich

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.