Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    Kicking a user from Captive Portal using PHP

    Scheduled Pinned Locked Moved Captive Portal
    2 Posts 1 Posters 2.5k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • L
      Lectrician
      last edited by

      I have a piece of code attached to the captive portal index.php file which logs a users IP, MAC and their name / email as entered on the captive portal screen.  I then have a PHP script which displays these logs day by day.  If the log entry is obviously fake, I have a button to click which puts a warning up on the captive portal screen the next time they authenticate, 5 warnings and then their MAC is banned for 3 days.

      All this is done with a little bit of PHP coding and a log file which contains an associative array such as
      $warnings[$clientmac] = "timestamp|warnqty|warnactive";

      When I click the "warn" button, I would also like to forcibly kick the user from the captive portal to force re-authentication.  Before I delve deeply into the code, does anyone know of a PHP function to call to achieve this?  Looking at the querystring of the URL pfsenseIP://status_captiveportal?order=&showact=&act=del&id=5041fe647c9c7 - The ID has no bearing to the MAC I don't believe?  Where is this ID taken from?

      Any info would be great!

      1 Reply Last reply Reply Quote 0
      • L
        Lectrician
        last edited by

        Ok,

        I have this bit of code which works to turn a MAC into the ID, and assume there wont be issues in using that to get the ID?

        //error_reporting(0);
        
        $ourmac = $_GET["mac"];
        $oursid = "";
        
        require("captiveportal.inc");
        
        if (file_exists("{$g['vardb_path']}/captiveportal.db")) {
        	$captiveportallck = lock('captiveportaldb');
        	$cpcontents = file("/var/db/captiveportal.db", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
        	unlock($captiveportallck);	
        }
        
        foreach ($cpcontents as $cpcontent) {
        	$cpent = explode(",", $cpcontent);
        	if($cpent[3] == $ourmac){
        	  $oursid = $cpent[5];
         	  break;
        	}
        }	
        
        echo "The SID is: $oursid";
        exit;
        ?>
        

        And I can then use:

        captiveportal_disconnect_client($oursid);

        to kick a client?

        1 Reply Last reply Reply Quote 0
        • First post
          Last post
        Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.