134 lines
4.9 KiB
Perl
134 lines
4.9 KiB
Perl
#!/usr/bin/perl
|
|
|
|
use strict;
|
|
use SNMP_util;
|
|
use Net::SMTP;
|
|
|
|
my $username = $ARGV[0];
|
|
my $sponsorname = $ARGV[1];
|
|
my $lifetime = $ARGV[2] * 3600 * 100;
|
|
my $usernamelength = length($username);
|
|
my $userpassword = randomPassword(8);
|
|
my @userchar = split("", $username);
|
|
my $usernameiso;
|
|
my $snmpcommunity = "flw";
|
|
my $wlc = "10.140.8.200";
|
|
my $snmpversion = "2c";
|
|
my $emailending = "geisslermail.de";
|
|
my $emailserver = "mscp.agadmin.de";
|
|
my $mailfrom = "wireless.andre";
|
|
|
|
# Note that a email is send to sponsorname@emailending later in this script
|
|
# Sponsorname is also used in the comment field of the guest user in the WLC
|
|
|
|
#OID used
|
|
# These are reversed engineered with wireshark.
|
|
# Note that each of these OID calls have to be prepended with OID+username_length+username_chars.
|
|
# Eg. username ABC will be OID.3.65.66.67
|
|
# Make a short break between the OID calls as the WLC seems to need a bit of time to process the user creation
|
|
|
|
# A undocumented xxx.24, if user exsist it fails, if user is new its okay, TYPE = i, On my WLC this value is 4
|
|
my $bsnLocalNetUserUnknownOID = ".1.3.6.1.4.1.14179.2.5.10.1.24";
|
|
|
|
# TYPE = i, On my WLC this value is 1
|
|
my $bsnLocalNetUserWlanId = ".1.3.6.1.4.1.14179.2.5.10.1.2";
|
|
|
|
# TYPE = s, a description of the user - should be the sponsor's first part of email
|
|
my $bsnLocalNetUserDescription = ".1.3.6.1.4.1.14179.2.5.10.1.4";
|
|
|
|
# TYPE = s, user password, will be generated automatic and send to sponsor's email
|
|
my $bsnLocalNetUserPassword = ".1.3.6.1.4.1.14179.2.5.10.1.3";
|
|
|
|
# TYPE = i, Value on shall be 24h == 8620921
|
|
my $bsnLocalNetUserLifetime = ".1.3.6.1.4.1.14179.2.5.10.1.5";
|
|
|
|
# TYPE = i, Unknown Cisco specific username, On my WLC this value is 1
|
|
my $cLWALocalNetUserIsGuest = ".1.3.6.1.4.1.9.9.515.2.3.1.1.2";
|
|
|
|
# TYPE = s, Cisco specific undocumented OID, Value on CPHGWC01 = default
|
|
my $cLWALocalNetUserIsUnknown = ".1.3.6.1.4.1.9.9.515.2.3.1.1.3";
|
|
|
|
foreach (@userchar) {
|
|
$usernameiso .= ".".ord($_);
|
|
}
|
|
|
|
$bsnLocalNetUserUnknownOID = $bsnLocalNetUserUnknownOID.".".$usernamelength.$usernameiso;
|
|
$bsnLocalNetUserWlanId = $bsnLocalNetUserWlanId.".".$usernamelength.$usernameiso;
|
|
$bsnLocalNetUserDescription = $bsnLocalNetUserDescription.".".$usernamelength.$usernameiso;
|
|
$bsnLocalNetUserPassword = $bsnLocalNetUserPassword.".".$usernamelength.$usernameiso;
|
|
$bsnLocalNetUserLifetime = $bsnLocalNetUserLifetime.".".$usernamelength.$usernameiso;
|
|
$cLWALocalNetUserIsGuest = $cLWALocalNetUserIsGuest.".".$usernamelength.$usernameiso;
|
|
$cLWALocalNetUserIsUnknown = $cLWALocalNetUserIsUnknown.".".$usernamelength.$usernameiso;
|
|
|
|
my ($response) = &snmpget("$snmpcommunity\@$wlc:161:5:1:1:$snmpversion", $bsnLocalNetUserUnknownOID);
|
|
if ($response) {
|
|
my ($extention) = &snmpset("$snmpcommunity\@$wlc:161:5:1:1:$snmpversion", $bsnLocalNetUserLifetime, "int", "$lifetime",
|
|
$bsnLocalNetUserPassword, "string", $userpassword
|
|
);
|
|
} else {
|
|
my (@response) = &snmpset("$snmpcommunity\@$wlc:161:5:1:1:$snmpversion",
|
|
$bsnLocalNetUserUnknownOID, "int", "4",
|
|
$bsnLocalNetUserWlanId, "int", "1",
|
|
$bsnLocalNetUserDescription, "string", $sponsorname,
|
|
$bsnLocalNetUserPassword, "string", $userpassword
|
|
);
|
|
|
|
if (@response) {
|
|
print "SET part1: OK\n";
|
|
} else {
|
|
print "$wlc did not respond to SNMP set\n";
|
|
}
|
|
|
|
my (@response) = &snmpset("$snmpcommunity\@$wlc:161:5:1:1:$snmpversion",
|
|
$cLWALocalNetUserIsGuest, "int", "1",
|
|
$cLWALocalNetUserIsUnknown, "string", "default",
|
|
$bsnLocalNetUserLifetime, "int", "$lifetime"
|
|
);
|
|
|
|
if (@response) {
|
|
print "SET part2: OK\n";
|
|
} else {
|
|
print "$wlc did not respond to SNMP set\n";
|
|
}
|
|
}
|
|
|
|
#Create a new object with 'new'.
|
|
my $smtp = Net::SMTP->new($emailserver);
|
|
|
|
#Send the MAIL command to the server.
|
|
#$smtp->mail("$mailfrom\@$emailending");
|
|
$smtp->mail("andre\@geisslermail.de");
|
|
|
|
#Send the server the 'Mail To' address.
|
|
#$smtp->to("$sponsorname\@$emailending");
|
|
$smtp->to("andre\@geisslermail.de");
|
|
|
|
#Start the message.
|
|
$smtp->data();
|
|
#Send the subject
|
|
$smtp->datasend("Subject: regard the wireless user $username\n");
|
|
#Send the message.
|
|
$smtp->datasend("Hello!\n\nThe user: $username with password: $userpassword\nhave a $ARGV[2]h access to wireless\n\nEnjoy\n\nNetwork Department");
|
|
#End the message.
|
|
$smtp->dataend();
|
|
#Close the connection to your server.
|
|
$smtp->quit();
|
|
|
|
print "The user: $username with password: $userpassword\nhave a $ARGV[2]h access to wireless";
|
|
|
|
#password generator from the internet
|
|
sub randomPassword {
|
|
my $password;
|
|
my $_rand;
|
|
my $password_length = $_[0];
|
|
if (!$password_length) {
|
|
$password_length = 10;
|
|
}
|
|
my @chars = split(" ", "a b c d e f g h i j k l m n o p q r s t u v w x y z - _ % # | 0 1 2 3 4 5 6 7 8 9");
|
|
srand;
|
|
for (my $i=0; $i <= $password_length ;$i++) {
|
|
$_rand = int(rand 41);
|
|
$password .= $chars[$_rand];
|
|
}
|
|
return $password;
|
|
} |