Advertisement
YJesus

geopcap.pl

Oct 24th, 2013
939
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.34 KB | None | 0 0
  1. use strict;
  2. use Net::Pcap qw(:functions);
  3. use NetPacket::Ethernet qw(:strip);
  4. use NetPacket::IP qw(:strip);
  5. use NetPacket::TCP qw(:strip);
  6. use Geo::IP;
  7. use Socket;
  8.  
  9. my $gi = Geo::IP->open("GeoLiteCity.dat", GEOIP_STANDARD);
  10.  
  11. my $pcap_file = @ARGV[0];
  12. my $err = undef;
  13.  
  14. sub process_pkt {
  15.  
  16.         my ($arg, $hdr, $pkt) = @_;
  17.        
  18.        my $eth_obj  ;
  19.        my $ip_obj ;
  20.        
  21.     if (@ARGV[1] eq '-c') {
  22.        
  23.         $eth_obj  = unpack("x[16]a*", $pkt);
  24.         $ip_obj = NetPacket::IP->decode($eth_obj);
  25.    
  26.     }
  27.    
  28.     else {
  29.    
  30.         $eth_obj = NetPacket::Ethernet->decode($pkt);
  31.         $ip_obj = NetPacket::IP->decode($eth_obj->{data});
  32.        
  33.     }
  34.    
  35.         my $tcp_obj = NetPacket::TCP->decode($ip_obj->{data});
  36.    
  37.     my $tcpdest = $tcp_obj->{dest_port} ;
  38.     my $ipsrc = $ip_obj->{src_ip} ;
  39.    
  40.     my $tcpproto;
  41.    
  42.     my $iaddr = inet_aton($ipsrc); # or whatever address
  43.         my $hostname  = gethostbyaddr($iaddr, AF_INET);
  44.    
  45.     my $record = $gi->record_by_addr($ipsrc);
  46.         my $pais;
  47.     my $ciudad;
  48.    
  49.        if($record) {
  50.  
  51.         $pais =$record->country_code ;
  52.        
  53.         $ciudad = $record->city ;
  54.     }
  55.    
  56.     print "$ipsrc,$hostname,$pais,$ciudad\n";
  57.    
  58. }
  59.  
  60.  
  61. my $pcap = Net::Pcap::pcap_open_offline($pcap_file, \$err) or die "Can't read $pcap_file : $err\n";
  62.  
  63. Net::Pcap::pcap_loop($pcap, -1, \&process_pkt, undef);
  64.  
  65. Net::Pcap::pcap_close($pcap);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement