| 1 | <?php
|
|---|
| 2 |
|
|---|
| 3 | if (isset($_SERVER['REMOTE_ADDR'])) die();
|
|---|
| 4 | include_once(dirname(__FILE__).'/../../../Common/Global.php');
|
|---|
| 5 | include_once(dirname(__FILE__).'/../Routerboard.php');
|
|---|
| 6 | $Path = array('ip', 'dhcp-server', 'lease');
|
|---|
| 7 |
|
|---|
| 8 | $Host = array();
|
|---|
| 9 |
|
|---|
| 10 | function ConvertExpireTime2($Time)
|
|---|
| 11 | {
|
|---|
| 12 | $TimeParts = explode(':', $Time);
|
|---|
| 13 | return $TimeParts[0] * 3600 + $TimeParts[1] * 60 + $TimeParts[2];
|
|---|
| 14 | }
|
|---|
| 15 |
|
|---|
| 16 | $Routerboard = new Routerboard();
|
|---|
| 17 | $Routerboard->UserName = $Config['MainRouter']['UserName'];
|
|---|
| 18 | $Routerboard->Timeout = $Config['MainRouter']['ConnectTimeout'];
|
|---|
| 19 |
|
|---|
| 20 | $DbResult3 = $System->Database->query('SELECT * FROM `NetworkSubnet` WHERE `Member` = 0 GROUP BY `DHCP`');
|
|---|
| 21 | while ($Subnet = $DbResult3->fetch_assoc())
|
|---|
| 22 | {
|
|---|
| 23 | echo($Subnet['AddressRange'].'/'.$Subnet['Mask'].' on router '.$Subnet['DHCP']."\n");
|
|---|
| 24 | $Routerboard->HostName = $Subnet['DHCP'];
|
|---|
| 25 | $List = $Routerboard->ListGet($Path, array('address', 'active-mac-address', 'active-address', 'expires-after', 'server', 'dynamic'));
|
|---|
| 26 | foreach ($List as $Properties)
|
|---|
| 27 | {
|
|---|
| 28 | if ($Properties['dynamic'] == 'true')
|
|---|
| 29 | //and ($Properties['address'] != $Properties['active-address']))
|
|---|
| 30 | {
|
|---|
| 31 | $Properties['expires-after'] = time() - (24 * 3600 - ConvertExpireTime2($Properties['expires-after']));
|
|---|
| 32 | echo('MAC: '.$Properties['active-mac-address']."\n");
|
|---|
| 33 | $DbRows2 = $System->Database->query('SELECT `Id` FROM `NetworkInterface` WHERE `MAC`="'.$Properties['active-mac-address'].'"');
|
|---|
| 34 | if ($DbRows2->num_rows > 0)
|
|---|
| 35 | {
|
|---|
| 36 | $Interface = $DbRows2->fetch_assoc();
|
|---|
| 37 | $InterfaceId = $Interface['Id'];
|
|---|
| 38 | $DbRows2 = $System->Database->query('SELECT `Id` FROM `NetworkInterfacePortable` WHERE `NetworkInterface`='.$InterfaceId);
|
|---|
| 39 | if ($DbRows2->num_rows > 0)
|
|---|
| 40 | {
|
|---|
| 41 | $System->Database->update('NetworkInterfacePortable', '`Time` < "'.TimeToMysqlDateTime($Properties['expires-after']).'" AND `NetworkInterface`='.$InterfaceId, array('DynamicIP' => $Properties['active-address'], 'Update' => 1));
|
|---|
| 42 | } else $System->Database->insert('NetworkInterfacePortable', array('NetworkInterface' => $InterfaceId, 'DynamicIP' => $Properties['active-address'], 'Time' => TimeToMysqlDateTime($Properties['expires-after']), 'Update' => 1));
|
|---|
| 43 | } else echo('Not registred'."\n");
|
|---|
| 44 | }
|
|---|
| 45 | }
|
|---|
| 46 | }
|
|---|
| 47 |
|
|---|
| 48 | // Update mangle and NAT
|
|---|
| 49 | $PathNAT = array('ip', 'firewall', 'nat');
|
|---|
| 50 | $PathMangle = array('ip', 'firewall', 'mangle');
|
|---|
| 51 | $MangleRule = array();
|
|---|
| 52 | $NATRule = array();
|
|---|
| 53 | $DbRows = $System->Database->query('SELECT NetworkDevice.Name AS DeviceName, NetworkInterface.Name AS InterfaceName, DynamicIP FROM `NetworkInterfacePortable` JOIN NetworkInterface ON NetworkInterface.Id=NetworkInterfacePortable.NetworkInterface JOIN NetworkDevice ON NetworkDevice.Id = NetworkInterface.Device WHERE `Update`=1');
|
|---|
| 54 | while ($Portable = $DbRows->fetch_assoc())
|
|---|
| 55 | {
|
|---|
| 56 | $Name = $Portable['DeviceName'];
|
|---|
| 57 | if ($Portable['InterfaceName'] != '') $Name .= '-'.$Portable['InterfaceName'];
|
|---|
| 58 | array_push($NATRule, implode(' ', $PathNAT).' set [find comment="'.$Name.'-in"] to-addresses='.$Portable['DynamicIP']);
|
|---|
| 59 | array_push($NATRule, implode(' ', $PathNAT).' set [find comment="'.$Name.'-out"] src-address='.$Portable['DynamicIP']);
|
|---|
| 60 | array_push($MangleRule, implode(' ', $PathMangle).' set [find comment="'.$Name.'-in"] dst-address='.$Portable['DynamicIP']);
|
|---|
| 61 | array_push($MangleRule, implode(' ', $PathMangle).' set [find comment="'.$Name.'-out"] src-address='.$Portable['DynamicIP']);
|
|---|
| 62 | }
|
|---|
| 63 |
|
|---|
| 64 | $Routerboard->HostName = $Config['MainRouter']['HostName'];
|
|---|
| 65 | print_r($NATRule);
|
|---|
| 66 | print_r($MangleRule);
|
|---|
| 67 | $Routerboard->ExecuteBatch($NATRule);
|
|---|
| 68 | $Routerboard->ExecuteBatch($MangleRule);
|
|---|
| 69 | $System->Database->query('UPDATE NetworkInterfacePortable SET Update=0');
|
|---|