Working Devices
Model Number Description Vulnerable Firmware Versions (less than or equal to)
E1200 Linksys E1200 1.0.04 (build 1) 2.0.11 (build 1)
E4200 Simultaneous Dual-Band Wireless-N Gigabit Router 1.0.06 (build 3) 2.1.41 (build 164606)
EA2700 Simultaneous Dual-Band Wireless-N Gigabit Router 1.1.40 (build 189581)
EA2750 Simultaneous Dual-Band Wireless-N Gigabit Router 1.1.8 (build 184154)
EA3500 Simultaneous Dual-Band Wireless-N Gigabit Router 1.1.40 (build 162464)
EA4500 Simultaneous Dual-Band Wireless-N Gigabit Router 2.1.42 (build 183584) 3.1.7 (build 181919)
EA5800 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.6.186296
EA6100 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.6 (build 181939)
EA6200 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.41 (build 188556)
EA6300 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.40 (build 184085)
EA6350 Simultaneous Dual-Band Wireless-AC Gigabit Router 3.1.10.191322
EA6400 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.40 (build 184085)
EA6500 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.40 (build 176451)
EA6700 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.41 (build 183873)
EA6900 Simultaneous Dual-Band Wireless-AC Gigabit Router 2.0.3.186963 1.1.43 (build 182871)
EA7300 Max-Stream AC1750 MU-MIMO GIGABIT ROUTER 1.1.4.192824
EA7400 Simultaneous Dual-Band Wireless-AC Gigabit Router 2.0.7.191563 1.1.5.190349
EA7500 Max-Stream AC1900 MU-MIMO GIGABIT ROUTER 2.0.7.191563 1.1.5.190349
EA8100 Max-Stream AC2600 MU-MIMO GIGABIT ROUTER 1.0.2.193233
EA8300 Linksys AC2200 MU-MIMO Gigabit Tri-Band Router 1.1.4.191539
EA8500 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.9.192968
EA9200 Linksys AC3200 Tri-Band Smart Wi-Fi Router 1.1.9 (Build 183676)
EA9300 Linksys MAX-STREAM AC4000 MU-MIMO Tri-Band Router 1.1.9.183697
EA9400 Linksys MAX-STREAM AC5000 MU-MIMO Gigabit Router 1.0.3.181249
EA9500 Linksys MAX-STREAM AC5400 MU-MIMO Gigabit Router 2.1.1.186574 1.1.7.180968
WRT1200AC Simultaneous Dual-Band Wireless-AC Gigabit Router 2.0.6.191786 1.0.5.187766
WRT1900AC Simultaneous Dual-Band Wireless-AC Gigabit Router 2.0.8.187766 1.1.10.187766
WRT1900ACS Simultaneous Dual-Band Wireless-AC Gigabit Router 2.0.2.188405 1.0.3.187766
WRT3200ACM Simultaneous Dual-Band Wireless-AC Gigabit Router 1.0.6.186168
XAC1200 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.42.166111
XAC1900 Simultaneous Dual-Band Wireless-AC Gigabit Router 1.1.42.162280
WHW01 Velop 1.1.10.191690
WHW03 Velop 1.1.8.192419 2.1.8.192419
PHP code
#!/usr/bin/php <?php // Settings $oh_url = "192.168.1.249"; $oh_port = "8080"; $linksys_ip = "192.168.1.251"; $devices_to_check = array( array('mac' => '6c:c7:ec:be:21:77', 'item' => 'Phone_1'), array('mac' => '64:cc:2e:64:fe:88', 'item' => 'Phone_2') ); if(!function_exists('curl_version')) { echo "Please install cURL for PHP\n"; echo "Ubuntu: sudo apt install php-curl\n"; exit; } // Get active connections from Linksys router $connections = getLinksysConnections($linksys_ip); // Loop throught devices to check foreach($devices_to_check as $device_to_check) { // Get state of device to check $state = getOHItemState($oh_url, $oh_port, $device_to_check['item']); // Check if device is online $is_online = isOnline($connections, $device_to_check['mac']); // Update status of device to check if($state == 'OFF' && $is_online) { setOHItemState($oh_url, $oh_port, $device_to_check['item'], 'ON'); } if($state == 'ON' && !$is_online) { setOHItemState($oh_url, $oh_port, $device_to_check['item'], 'OFF'); } } // isOnline function isOnline($connections, $mac_to_check) { $online = false; foreach($connections as $connection) { $connection_mac = $connection['macAddress']; if (strtoupper($mac_to_check)==$connection_mac) { $online = true; } } return $online; } // getOHItemState function getOHItemState($oh_url, $oh_port, $item) { $state = 'OFF'; $headers = array(); $headers[] = 'Content-Type: text/plain'; $headers[] = 'Accept: application/json'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_URL, "http://$oh_url:$oh_port/rest/items/$item"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $response = curl_exec($ch); if (!curl_errno($ch)) { $json = json_decode($response, true); if(isset($json['state'])) { $state = $json['state']; } } curl_close($ch); return $state; } // setOHItemState function setOHItemState($oh_url, $oh_port, $item, $state = 'OFF') { $return = false; $headers = array(); $headers[] = 'Content-Type: text/plain'; $headers[] = 'Accept: application/json'; $ch = curl_init(); curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); curl_setopt($ch, CURLOPT_URL, "http://$oh_url:$oh_port/rest/items/$item"); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $state); curl_exec($ch); if (!curl_errno($ch)) { $return = true; } curl_close($ch); return $return; } // getLinksysConnections function getLinksysConnections($linksys_ip) { define('ACTION', 'http://cisco.com/jnap/networkconnections/GetNetworkConnections'); $connections = array(); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'http://'.$linksys_ip.'/JNAP/'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, "{}"); $headers = array(); $headers[] = 'X-Jnap-Action: '.ACTION; $headers[] = 'Content-Type: application/x-www-form-urlencoded'; curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); $json = json_decode(curl_exec($ch), true); if (!curl_errno($ch)) { $connections = $json['output']['connections']; } curl_close($ch); return $connections; }
Crontab
*/1 * * * * /path/phpscript