$login = 'nas-login';
$passwd = 'nas-password';
$host=shift || '';
$type = shift || 'snmp';
$nastype = shift || 'cisco';
$username=shift || '';
$sessionid = shift || '';
$port = 0;
$comm = '';
if ($type eq 'snmp'){
$comm = shift || 'public';
}
if ($type eq 'telnet'){
$port = shift || 0;
}
die "No \$host argument given\n" if ($host eq '');
die "No \$username argument given\n" if ($username eq '');
if ($nastype eq 'cisco' && $type eq 'telnet'){
die "Usage: clearsession \$host telnet cisco \$username \$sessionid \$port\n" if ($port == 0);
if (eval require Net::Telnet::Cisco){
Net::Telnet::Cisco->import();
my $session = Net::Telnet::Cisco->new(Host => $host);
$session->login($login, $passwd);
if ($port >= 20000){
my @output = $session->cmd("sh caller user $username");
foreach $line (@output){
if ($line =~ /User: $username, line (Vi\d+),/){
$session->cmd("clear interface $1");
}
}
}
else{
$session->cmd("clear line $port\n");
}
$session->close;
}
}
if ($nastype eq 'cisco' && $type eq 'snmp'){
$SNMPGET="/usr/local/bin/snmpget";
$SNMPSET="/usr/local/bin/snmpset";
die "Could not find snmpwalk binary. Please make sure that the \$SNMPGET variable points to the right location\n" if (! -x $SNMPGET);
die "Could not find snmpset binary. Please make sure that the \$SNMPSET variable points to the right location\n" if (! -x $SNMPSET);
die "Usage: clearsession \$host snmp \$username cisco \$sessionid \$community\n" if ($sessionid eq '' || $comm eq '');
if ($sessionid ne '' && $username ne ''){
print "$SNMPGET -v2c -c $comm $host .iso.org.dod.internet.private.enterprises.9.9.150.1.1.3.1.2.$sessionid\n";
$walk =`$SNMPGET -v2c -c $comm $host .iso.org.dod.internet.private.enterprises.9.9.150.1.1.3.1.2.$sessionid`;
unless ($walk =~ /^$/){
if ($walk =~ /$username/){
print "FOUND: $username\n";
`$SNMPSET -v2c -c $comm $host .iso.org.dod.internet.private.enterprises.9.9.150.1.1.3.1.5.$sessionid i 1`;
}
}
}
}