117 lines
3.3 KiB
PHP
117 lines
3.3 KiB
PHP
<?php
|
|
// -------------------------------------------
|
|
// Wake On LAN Webclient -- on private LAN
|
|
|
|
// copyright: Jannik Beyerstedt | https://jannikbeyerstedt.de
|
|
// license: http://www.gnu.org/licenses/gpl-3.0.txt GPLv3 License
|
|
// -------------------------------------------
|
|
|
|
if (isset($_GET['wake'])) {
|
|
$return = shell_exec('wakeonlan '.$_GET['wake']);
|
|
}
|
|
|
|
$clients = ["nuc6i5-host.fra80"=>"b8:ae:ed:ec:18:f7",
|
|
"magrathea.fra80" =>"60:03:08:9c:25:6a"];
|
|
?>
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>WakeOnLan @ UrsaMinor.fra80</title>
|
|
<style>
|
|
body {
|
|
max-width: 500px;
|
|
margin: 0 auto;
|
|
padding: 0 10px;
|
|
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";
|
|
}
|
|
body > h1:first-child { margin-top: 0.3em; }
|
|
small {
|
|
font-size: 0.7em;
|
|
font-weight: 500;
|
|
}
|
|
ul {
|
|
padding-left: 20px;
|
|
}
|
|
li {
|
|
margin-bottom: 1.5em;
|
|
}
|
|
a, a:visited {
|
|
color: blue;
|
|
}
|
|
|
|
div.info {
|
|
margin: -10px; padding: 10px;
|
|
background-color: #e2e2e2;
|
|
border: 1px solid #787878;
|
|
border-radius: 5px;
|
|
}
|
|
div.info > p:first-child {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.red { color: red; }
|
|
.green { color: green; }
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<h1>Wake On LAN Service</h1>
|
|
<?php if (isset($return)) : ?>
|
|
<div class="info">
|
|
<p>The command returned:</p>
|
|
<pre><?php echo $return; ?></pre>
|
|
<a href="index.php">OK</a>
|
|
</div>
|
|
<?php endif; ?>
|
|
<p>I can try to wake up the following clients for you:</p>
|
|
<ul id="clients">
|
|
<?php foreach ($clients as $name=>$mac) : ?>
|
|
<li data="<?php echo $name ?>">
|
|
<a href="?wake=<?php echo $mac ?>">wake up</a> <?php echo $name ?> (<?php echo $mac ?>)
|
|
</li>
|
|
<?php endforeach; ?>
|
|
</ul>
|
|
</body>
|
|
<script type="text/javascript">
|
|
clients = document.getElementById("clients").children;
|
|
for (var i = 0; i < clients.length; i++) {
|
|
element = clients[i];
|
|
hostname = clients[i].attributes['data'].value;
|
|
|
|
console.log("ping: " + hostname);
|
|
asyncRequest(element, hostname);
|
|
}
|
|
|
|
function asyncRequest(element, hostname) {
|
|
var xhttp = new XMLHttpRequest();
|
|
xhttp.onreadystatechange = function(){
|
|
if (this.readyState == 4) {
|
|
if (this.status == 200) {
|
|
callBack(element, xhttp.responseText, this.status);
|
|
} else {
|
|
console.log("Error requesting ping: " + this.status + ", " + xhttp.responseText);
|
|
}
|
|
}
|
|
};
|
|
xhttp.open("GET", "ping.php?hostname=" + hostname, true);
|
|
xhttp.send();
|
|
|
|
function callBack(element, response, statusCode) {
|
|
var node = document.createElement("span");
|
|
node.innerHTML = "•";
|
|
if (xhttp.responseText.substring(0, 1) == "1") {
|
|
node.className = "green";
|
|
element.appendChild(node);
|
|
element.append(" online");
|
|
} else {
|
|
node.className = "red";
|
|
element.appendChild(node);
|
|
element.append(" offline");
|
|
}
|
|
}
|
|
}
|
|
</script>
|
|
</html>
|