#!/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; }