show_dup.pl 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/usr/bin/perl
  2. #
  3. # Copyright (C) Roman Dmitiriev, rnd@rajven.ru
  4. #
  5. use FindBin '$Bin';
  6. use lib "$Bin/";
  7. use strict;
  8. use DBI;
  9. use Time::Local;
  10. use Net::Patricia;
  11. use Data::Dumper;
  12. use Date::Parse;
  13. use Socket;
  14. use Rstat::config;
  15. use Rstat::main;
  16. use Rstat::net_utils;
  17. use Rstat::mysql;
  18. use NetAddr::IP;
  19. setpriority(0,0,19);
  20. #get userid list
  21. my $user_auth_list = $dbh->prepare( "SELECT id,ip,mac,user_id FROM User_auth Where deleted=0 ORDER by id,ip_int,mac" );
  22. if ( !defined $user_auth_list ) { die "Cannot prepare statement: $DBI::errstr\n"; }
  23. $user_auth_list->execute;
  24. my $authlist_ref = $user_auth_list->fetchall_arrayref();
  25. $user_auth_list->finish();
  26. $dbh->disconnect;
  27. my %nethash;
  28. foreach my $net (@all_network_list) {
  29. $nethash{$net}{network}= new Net::Patricia;
  30. $nethash{$net}{network}->add_string($net);
  31. }
  32. foreach my $row (@$authlist_ref) {
  33. my $id=$row->[0];
  34. my $ip=$row->[1];
  35. my $mac=mac_splitted($row->[2]);
  36. my $user_id=$row->[3];
  37. foreach my $net (keys %nethash) {
  38. if ($nethash{$net}{network}->match_string($ip)) {
  39. if (exists $nethash{$net}{$mac}) {
  40. print "Dup found! id:$id mac: $mac ip:$ip First id: $nethash{$net}{$mac}{id} ip: $nethash{$net}{$mac}{ip}\n";
  41. last;
  42. }
  43. $nethash{$net}{$mac}{id}=$id;
  44. $nethash{$net}{$mac}{ip}=$ip;
  45. last;
  46. }
  47. }
  48. }
  49. exit 0;