MikroTik ป้องกันการ Login ซ้อน
หลายท่านที่เป็น admin คงเคยเจออาการการ login ซ้อนกันมานะคัรบที่จะมีข้อความแจ้งเตือนว่า simultaneous session limit reached for user กันมาบ้างวันนี้ผมจะเอา script จาก MikroTik forum มาบอกเล่ากันคัรบ (https://forum.mikrotik.com/viewtopic.php?t=123434)
:local uname $user;
:local usercount 0;
:local usertime "00:00:00";
:local kickable;
:local maxuser 3;
:foreach i in=[/ip hotspot active find user=$uname] do= {
:local curup [/ip hotspot active get $i uptime];
:if ( $curup > $usertime ) do={
:set usertime $curup;
:set kickable $i;
}
:set usercount ($usercount+1);
}
:if ($usercount >= $maxuser) do={
:log info "Login user: $uname ($usercount/$maxuser) - Oldest $usertime will be logout!";
/ip hotspot active remove numbers=$kickable;
} else {
:log info "Login user: $uname ($usercount/$maxuser)";
}
จากตัวอย่างใน script เราจะต้องเอาไปวางไว้ในส่วนของ winbox => ip => hotspot => user profile แล้วตั้ง maxuser ให้ตามจำนวนที่ต้องการเช่นในตัวอย่างตั้ง 3 เพราะต้องการให้ login ได้ใช้งานแค่ 2 คนเท่านั่น
จากนั่นก็ไปแก้ที่ Shared Users ให้เท่ากับจำนวน maxuser ที่ใน script
เพียงเท่านี้เวลามีการ login ซ้อนเกิดขึ้นมา user แกสุดก็จะโดนเตะออกละคัรบ
:local uname $user;
:local usercount 0;
:local usertime "00:00:00";
:local kickable;
:local maxuser 3;
:foreach i in=[/ip hotspot active find user=$uname] do= {
:local curup [/ip hotspot active get $i uptime];
:if ( $curup > $usertime ) do={
:set usertime $curup;
:set kickable $i;
}
:set usercount ($usercount+1);
}
:if ($usercount >= $maxuser) do={
:log info "Login user: $uname ($usercount/$maxuser) - Oldest $usertime will be logout!";
/ip hotspot active remove numbers=$kickable;
} else {
:log info "Login user: $uname ($usercount/$maxuser)";
}
จากตัวอย่างใน script เราจะต้องเอาไปวางไว้ในส่วนของ winbox => ip => hotspot => user profile แล้วตั้ง maxuser ให้ตามจำนวนที่ต้องการเช่นในตัวอย่างตั้ง 3 เพราะต้องการให้ login ได้ใช้งานแค่ 2 คนเท่านั่น
จากนั่นก็ไปแก้ที่ Shared Users ให้เท่ากับจำนวน maxuser ที่ใน script
เพียงเท่านี้เวลามีการ login ซ้อนเกิดขึ้นมา user แกสุดก็จะโดนเตะออกละคัรบ
# base function Sourcecode: Mikrotik Forum
# Local Variables Section
:local uname $user;
:local usercount 0;
:local usertime "00:00:00";
# Variable for user who is previously logged in
:local kickable;
# Variable for max session allowed, 2 means only one session is allowed at a time
:local maxuser 2;
# Load all active users in hotspot
:foreach i in=[/ip hotspot active find user=$uname] do= {
# Load UPTIME for all users to be matched later
:local curup [/ip hotspot active get $i uptime];
# If previous logged user is matched using UPTIME [above then 0] then set global variables for disconnection
:if ( $curup > $usertime ) do={
:set usertime $curup;
:set kickable $i;
}
:set usercount ($usercount+1);
}
# IF Function for user who is already logged in,
:if ($usercount >= $maxuser) do={
:log info "Login user: $uname ($usercount/$maxuser) - Oldest $usertime will be logout!";
# Kick previous logged users (if same ID)
/ip hotspot active remove numbers=$kickable;
# If not, do nothing, just log, You can modify this function as well / JZ
} else {
:log info "Login user: $uname ($usercount/$maxuser)";
ไม่มีความคิดเห็น:
แสดงความคิดเห็น