fix_net.pl 1.3 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::snmp;
  18. use Rstat::mysql;
  19. use NetAddr::IP;
  20. setpriority(0,0,19);
  21. #get userid list
  22. my $user_auth_list = $dbh->prepare( "SELECT id,ip FROM User_auth ORDER by ip" );
  23. if ( !defined $user_auth_list ) { die "Cannot prepare statement: $DBI::errstr\n"; }
  24. $user_auth_list->execute;
  25. my $authlist_ref = $user_auth_list->fetchall_arrayref();
  26. $user_auth_list->finish();
  27. my @batch_sql=();
  28. foreach my $row (@$authlist_ref) {
  29. my $ip=$row->[1];
  30. my $id=$row->[0];
  31. my $net=GetDhcpRange($ip);
  32. print "Auth id: $id Found network: $ip\n";
  33. print "NETWORK: $net->{network}\nBROADCAST: $net->{broadcast}\nMASK: $net->{mask}\n";
  34. my $ip_aton=StrToIp($net->{network});
  35. my $ip_aton_end=StrToIp($net->{broadcast});
  36. push(@batch_sql,"Update User_auth set ip_int=".$ip_aton.", ip_int_end=".$ip_aton_end." where id=".$id);
  37. }
  38. if (scalar @batch_sql) {
  39. $dbh->{AutoCommit} = 0;
  40. my $sth;
  41. foreach my $sSQL(@batch_sql) {
  42. print "$sSQL\n";
  43. $sth = $dbh->prepare($sSQL);
  44. $sth->execute;
  45. }
  46. $sth->finish;
  47. $dbh->{AutoCommit} = 1;
  48. }
  49. $dbh->disconnect;
  50. exit 0;