initial commit
[map.git] / pcap-colors.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use Net::Pcap;
5 use NetPacket::Ethernet;
6 use NetPacket::IP;
7 use NetPacket::TCP;
8 use Socket;
9 use IO::Socket;
10
11 use Geo::IP;
12 my $gi = Geo::IP->open("GeoLiteCity.dat", GEOIP_STANDARD);
13
14 my $err;
15
16 my $dev = "eth0";
17 unless (defined $dev) {
18     $dev = Net::Pcap::lookupdev(\$err);
19     if (defined $err) {
20         die 'Unable to determine network device for monitoring - ', $err;
21     }
22 }
23
24 my $server = IO::Socket::INET->new(
25         Proto     => 'tcp',
26         PeerPort => 10000,
27         PeerAddr    => 'localhost' )
28     or die "can't setup server";
29
30
31 #while (1) {
32   #print $client "connection";
33   my ($address, $netmask);
34   print "Starting to send data\n";
35   #$client->autoflush(1);
36   my $object = Net::Pcap::open_live($dev, 1500, 0, 0, \$err);
37
38   my $filter;
39   Net::Pcap::compile(
40       $object, 
41       \$filter, 
42       '(tcp[13] & 2!=0) && (not src net 192.168.0.0/16)',
43       0, 
44       $netmask
45   ) && die 'Unable to compile packet capture filter';
46   Net::Pcap::setfilter($object, $filter) &&
47     die 'Unable to set packet capture filter';
48
49
50   unless (defined $object) {
51     die 'Unable to create packet capture on device ', $dev, ' - ', $err;
52   }
53
54   #print $server "ticklex";
55
56   Net::Pcap::loop($object, -1, \&syn_packets, $server) ||
57     die 'Unable to perform packet capture';
58 #}
59
60 sub syn_packets {
61     my ($user_data, $header, $packet) = @_;
62     my $ether_data = NetPacket::Ethernet::strip($packet);
63     my $ip = NetPacket::IP->decode($ether_data);
64     my $tcp = NetPacket::TCP->decode($ip->{'data'});
65
66     #print "Debating" . $ip->{'src_ip'}. " \n";
67
68     #if ($tcp->{'flags'} eq FIN) {
69       my $record = $gi->record_by_addr($ip->{'src_ip'});
70       if ($record) {
71         print $ip->{'src_ip'}. " - " ."Sending ".$record->latitude.":".$record->longitude."\n";
72         print $user_data $record->latitude.":".$record->longitude."-red:darkred\n";;
73       }
74     #}
75 }
76