#!/usr/bin/perl
use strict;
use Cwd;
use POSIX qw(strftime);
my $config_dir = "etc";
my $vip_dbm = 'vip.dbm';
my $conns_500_dbm="conns_500.dbm";
my ($ip,$username,%vips,%conns_500);
my $time = strftime "%Y-%m-%d %H:%M:%S",localtime;
chdir ($config_dir) || die "Cannot open $config_dir: $!";
dbmopen(%vips,$vip_dbm,0644) || die "Cannot open DBM $vip_dbm:$!";
dbmopen(%conns_500,"$conns_500_dbm",0644) || die "Cannot open DBM $conns_500_dbm:$!";
sub useradd {
my ($_ip,$_username) = @_;
if ( not defined $vips{$_ip} ) {
if ( $_ip =~ /^192\.168\.\d+\.\d+$/ ) {
if ( length($_username) > 0 ) {
$vips{$_ip} = ucfirst($_username)."\t\t\t| $time";
testuser($_ip);
}else{
$vips{$_ip} = "VIP\t\t\t| $time";
testuser($_ip);
}
}elsif ( $_ip =~ /^(192\.168\.\d+\.)\*$/) {
if (length($username) > 0) {
#print length($_ip),"\n",length($_username),"\n";
for ( my $i=0; $i<256; $i++ ) {
$_ip = $1.$i;
if (not defined $vips{$_ip}){
$vips{$_ip} = ucfirst($_username)."\t\t\t| $time";
testuser($_ip);
}else{
print "\nThe $_ip was VIP!\n";
}
}
}else{
print "\nError : Please Enter Username !\n";
}
}else{
print "\nEnter IP $_ip Syntax is Error , or The Ip Address was Vip!\n";
}
}else{
print "\nThe $_ip was VIP!\n";
}
}
sub testuser {
my $_ip = shift;
if (defined $vips{$_ip}) {
print "\n$_ip - $vips{$_ip} Create Successfuly!\n";
if ( defined($conns_500{$_ip} )) {
delete $conns_500{$_ip};
}
}else{
print "\n$_ip - VIP Create Failed!\n";
}
}
SWITCH: {
print "\nSelect:{show|grep|add|del|quit}:";
while (<>) {
chomp($_);
if (/^add$/) {
print "Enter VIP's IP Address[192.168.*.*]:";
chomp($ip = <STDIN>);
if (defined $vips{$ip}){
print "\nThe $ip was VIP!\n";
redo SWITCH;
}
print "Enter The vip's Username:";
chomp($username = <STDIN>);
useradd($ip,$username);
redo SWITCH;
}
if (/^show$/) {
foreach my $keys (sort {"\L$a" cmp "\L$b" } keys %vips) {
my $values = $vips{$keys};
print "The $keys is $values\n";
}
redo SWITCH;
}
if (/^grep$/) {
print "Enter Find vip's ip address[192.168.*.*]:";
chomp($ip = <STDIN>);
if (( $ip =~ m/^192\.168\.\d+\.\d+$/ ) && (defined $vips{$ip}) ) {
print "\nThe $ip is $vips{$ip}!\n";
}else{
print "\nThe $ip is not VIP , or IP Address Syntax is Error!\n";
}
redo SWITCH;
}
if (/^del$/) {
print "Enter del vip's ip address[192.168.*.*]:";
chomp($ip = <STDIN>);
if ( ( $ip =~ m/^192\.168\.\d+\.\d+$/ ) && (defined $vips{$ip}) ) {
delete $vips{$ip};
if ((!defined $vips{$ip})) {
print "\n$ip - Vip Delete Successfuly!\n";
}else{
print "\n$ip - Vip Delete Failed!\n";
}
}elsif ( $ip =~ m/^(192\.168\.\d+\.)\*$/ ) {
print "Please Enter the same username:";
chomp(my $username = <STDIN>);
for ( my $i=0; $i<256; $i++ ) {
$ip = $1.$i;
if ( (defined $vips{$ip}) and ($vips{$ip} =~ /^$username\s+.*$/i )) {
delete $vips{$ip};
print "\n$ip - Vip Delete Successfuly!\n";
}
}
}else{
print "\nThe $ip is not VIP , or IP Address Syntax is Error!\n";
}
redo SWITCH;
}
if (/^quit|^q$/) {
dbmclose(%vips);
dbmclose(%conns_500);
exit 0;
}
if (/.*/) {
redo SWITCH;
}
}
}