Enable/Disable new guest user account daily

From MikroTik Wiki
Revision as of 23:50, 8 January 2009 by Gregsowell (talk | contribs) (Autoit Script)
Jump to: navigation, search

We have hotspot gateways at different locations. Each uses radius authentication on our Active Directory domain. Rather than creating a single or even a handful of guest accounts, I wanted to have a new one for each day. This should provide for better security. I also didn't want to have to manually enable/disable them everyday.

I have 366 hotspot user accounts created. Each is named guestX where X is the day of year. As in guest1 for the guest account for January 1st. Each account has a different password.

The Disable script is scheduled to run at 23:58 everyday to disable the last 5 days guest accounts. I do 5 days just in case there were some sort of power failure and the script hasn't run for some time.

The Enable script runs at 00:01 everyday to enable that day's guest account.

The Autoit script creates a text file with all the guest accounts with random passwords ready to paste onto the command line. Autoit is a free scripting language for windows that will do most anything. Autoit Homepage

The last piece is up to you, which is how to distribute the usernames/passwords. We have a page on our sharepoint server that will give you that day's username/password.

All scripts were written and run on 2.9.51 systems.

Disable Script

:local date

#get system date
:set date [/system clock get date]

:local day
:local dayc
:local month
:local year
:local leap
:local dayof

#sets the values
:set month [:pick $date 0 3]
:set day [:pick $date 4 6]
#this is just incase the day has a 0 before the number
:set dayc [:pick $date 5 6]
:set year [:pick $date 7 11]
:set leap [:pick $date 0 6]
:set dayof 0

#sets starting date for month
:if ($month = "feb") do={ :set dayof 31 }
:if ($month = "mar") do={ :set dayof 59 } 
:if ($month = "apr") do={ :set dayof 90 }
:if ($month = "may") do={ :set dayof 120 }
:if ($month = "jun") do={ :set dayof 151 }
:if ($month = "jul") do={ :set dayof 181 }
:if ($month = "aug") do={ :set dayof 212 }
:if ($month = "sep") do={ :set dayof 243 }
:if ($month = "oct") do={ :set dayof 273 }
:if ($month = "nov") do={ :set dayof 304 }
:if ($month = "dec") do={ :set dayof 334 }

#check for leap year
:if ($leap = "feb/29") do={ :set dayof 366 }

#this removes any leading 0 s from the day
:if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}

#determines day of year #
:if ($dayof < 366) do={ :set dayof ($dayof + $day) }

#disables last 5 days worth, just incase of power failure
:for e from ( $dayof - 5 ) to ( $dayof ) do={  /ip hotspot user disable ("guest" . $e) }

#this accounts for first of the year
:if ($dayof < 4) do={ :set dayof 366 }

:if ($dayof = 366) do={:for e from ( $dayof - 5 ) to ( $dayof ) do={  /ip hotspot user disable ("guest" . $e) }}

Enable Script

:local date

:set date [/system clock get date]

:local day
:local dayc
:local month
:local year
:local leap
:local dayof

#sets variables
:set month [:pick $date 0 3]
#just incase there is a leading 0 in the day
:set dayc [:pick $date 5 6]
:set day [:pick $date 4 6]
:set year [:pick $date 7 11]
:set leap [:pick $date 0 6]
:set dayof 0

#sets start day of year
:if ($month = "feb") do={ :set dayof 31 }
:if ($month = "mar") do={ :set dayof 59 } 
:if ($month = "apr") do={ :set dayof 90 }
:if ($month = "may") do={ :set dayof 120 }
:if ($month = "jun") do={ :set dayof 151 }
:if ($month = "jul") do={ :set dayof 181 }
:if ($month = "aug") do={ :set dayof 212 }
:if ($month = "sep") do={ :set dayof 243 }
:if ($month = "oct") do={ :set dayof 273 }
:if ($month = "nov") do={ :set dayof 304 }
:if ($month = "dec") do={ :set dayof 334 }

#checks for leap year
:if ($leap = "feb/29") do={ :set dayof 366 }

#this removes any leading 0 s from the day
:if ([:pick $date 4 5] = 0) do={ :set day ($dayc)}

#totals up the day of year
:if ($dayof < 366) do={ :set dayof ($day + $dayof) }

:log info ($dayof)

#enables proper day
/ip hotspot user enable ("guest" . $dayof)

Autoit Script

;generate usernames and passwords for hotspot.

$file = FileOpen(@ScriptDir & "\users.txt", 1)

; Check if file opened for writing OK
If $file = -1 Then
    MsgBox(0, "Error", "Unable to open file.")
    Exit
EndIf

for $x = 1 to 366
	
	FileWriteLine($file, "add name=""guest" & $x & """ password=""" & Random(111111, 999999, 1) & """ profile=default  disabled=yes" & @CRLF)

Next
FileClose($file)