Updated with frontend and added new features
2
.gitignore
vendored
|
@ -3,3 +3,5 @@ design
|
|||
db
|
||||
config.php
|
||||
scanner/pamela.log
|
||||
mac_log.csv
|
||||
mac_log.csv.complete
|
||||
|
|
31
admin.php
Executable file
|
@ -0,0 +1,31 @@
|
|||
<?php
|
||||
|
||||
if ($_POST) {
|
||||
$text = preg_replace("/\s{2}/i","\n",$_POST['text']);
|
||||
file_put_contents("mac_log.csv",$text);
|
||||
header ("Location: ".$_SERVER['PHP_SELF']."?saved=true");
|
||||
exit;
|
||||
}
|
||||
$text = htmlspecialchars(file_get_contents("mac_log.csv"));
|
||||
|
||||
if($_GET['saved'] == "true") {
|
||||
$message = "Saved successfully.";
|
||||
}
|
||||
|
||||
|
||||
?><html>
|
||||
<head>
|
||||
<style type="text/css">
|
||||
textarea { height: 600px; width: 400px; }
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<span class="message">
|
||||
<?php echo $message; ?>
|
||||
</span>
|
||||
<form method="POST">
|
||||
<textarea name="text"><?php echo $text; ?></textarea>
|
||||
<input type="submit" value="Save">
|
||||
</form>
|
||||
</body>
|
||||
</html>
|
77
associate.php
Executable file
|
@ -0,0 +1,77 @@
|
|||
<?php
|
||||
|
||||
$message = "";
|
||||
if(isset($_POST['submit'])) {
|
||||
|
||||
$mac = csv_filter($_POST['macaddress']);
|
||||
$name = csv_filter($_POST['name']);
|
||||
|
||||
if($mac != "" && $name != null) {
|
||||
if(is_mac($mac)) {
|
||||
file_put_contents("mac_log.csv","$mac,$name\n",FILE_APPEND);
|
||||
$message = "Registered, thanks! It might take a few minutes for your name to show up.";
|
||||
}
|
||||
else {
|
||||
$message = "The MAC address doesn't look right. MAC addresses look like this: 00:1a:2b:3c:4d:5e";
|
||||
}
|
||||
}
|
||||
else {
|
||||
$message = "Please enter a MAC address and name.";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
function csv_filter($value) {
|
||||
return preg_replace('/[^a-z0-9:]/i','',$value);
|
||||
}
|
||||
|
||||
function is_mac($mac) {
|
||||
if(preg_match('/^([0-9a-f]{2}([:-]|$)){6}$/i',$mac) > 0){
|
||||
return true;}
|
||||
else { return false; }
|
||||
}
|
||||
|
||||
$arp_found = false;
|
||||
|
||||
function arp_lookup($ip) {
|
||||
global $arp_found;
|
||||
|
||||
$arp = shell_exec("/usr/sbin/arp -a | grep $ip");
|
||||
preg_match('/at ([0-9a-f]{2}[: ]){6}/i',$arp,$matches);
|
||||
if(sizeof($matches) > 0) {
|
||||
$mac = split(" ",$matches[0]);
|
||||
$arp_found = true;
|
||||
return $mac[1];
|
||||
}
|
||||
else {
|
||||
$arp_found = false;
|
||||
return "";
|
||||
}
|
||||
}
|
||||
include('header-inc.php');
|
||||
?>
|
||||
<span class="message">
|
||||
<?php echo $message; ?>
|
||||
</span>
|
||||
|
||||
<div id="content">
|
||||
<h2>Register Your Device</h2>
|
||||
<div class="caption">
|
||||
<form method="post" action="<?php echo htmlentities($_SERVER['PHP_SELF']); ?>">
|
||||
<h3>Your computer or mobile device's MAC address can be found under your network info!</h3>
|
||||
<table>
|
||||
<tr><td><label for="name">Your Name:</label></td><td><input type="text" id="name" name="name" /></td></tr>
|
||||
<tr><td><label for="macaddress">MAC Address:</label></td><td><input type="text" id="macaddress" name="macaddress" value="<?php echo arp_lookup($_SERVER['REMOTE_ADDR']); ?>" />
|
||||
<span id="autodetect"><?php if($arp_found) { echo "(Autodetected MAC from IP address ".$_SERVER['REMOTE_ADDR'].")"; } ?></span>
|
||||
</td></tr>
|
||||
</table>
|
||||
<input type="submit" id="submit" name="submit" value="Register" />
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
39
header-inc.php
Executable file
|
@ -0,0 +1,39 @@
|
|||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||||
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html>
|
||||
<head>
|
||||
<?php if(isset($auto_reload)) { ?>
|
||||
<script type="text/javascript">
|
||||
function reload() {
|
||||
window.location.reload()
|
||||
}
|
||||
function pageLoad() {
|
||||
setInterval ( "reload()", 30000 );
|
||||
}
|
||||
</script>
|
||||
<?php } ?>
|
||||
<style type="text/css">
|
||||
#autodetect { display: block; color: #666; }
|
||||
.macaddr { color: #666; }
|
||||
</style>
|
||||
<link href="style.css" rel="stylesheet" type="text/css" />
|
||||
<link href="http://fonts.googleapis.com/css?family=Lato:300,400,700,300italic,400italic,700italic" rel="stylesheet" type="text/css" />
|
||||
</head>
|
||||
|
||||
<body <?php if(isset($auto_reload)){ ?>onLoad="pageLoad()"<?php } ?>>
|
||||
<div id="header">
|
||||
<div id="header_middle">
|
||||
<img src="/static/images/logo.png" />
|
||||
<div id="header_buttons">
|
||||
<h2>Local Network</h2>
|
||||
<p>See if there are people at the space!<br/>
|
||||
If the feed is broken, please contact <a href="#">someone</a>.</p>
|
||||
<p>Nobody here? Check the <a href="#">Website</a>.</p>
|
||||
</div>
|
||||
</div>
|
||||
<div id="header_menu">
|
||||
<a href="/">See Who's Here</a>
|
||||
<a href="/associate.php">Register your device!</a>
|
||||
</div>
|
||||
</div>
|
||||
<div id="content">
|
63
index.php
|
@ -1,45 +1,30 @@
|
|||
<?php
|
||||
/*
|
||||
Copyright 2010 Pieter Iserbyt
|
||||
<?php
|
||||
$auto_reload = true;
|
||||
include('header-inc.php');
|
||||
|
||||
This file is part of Pamela.
|
||||
|
||||
Pamela is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
$result = http_parse_message(http_get("http://localhost/pamela/data.php"));
|
||||
$result = preg_replace("/\s/","",$result->body); // get rid of linebreaks
|
||||
|
||||
Pamela is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
$decode = json_decode($result);
|
||||
$decode = preg_replace("/^([0-9a-f]{2}([:]|$)){6}$/i",'{$0}',$decode);
|
||||
sort($decode,SORT_STRING | SORT_FLAG_CASE);
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Pamela. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
$array = preg_grep("/^(?!\.)/",$decode);
|
||||
|
||||
require_once("config.php");
|
||||
?><html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Pamela</title>
|
||||
<script src="js/jquery-1.3.2.js" type="text/javascript"></script>
|
||||
<script src="js/pamela-conf.php" type="text/javascript"></script>
|
||||
<script src="js/pamela-buttons.js" type="text/javascript"></script>
|
||||
<script src="js/pamela-nodes.js" type="text/javascript"></script>
|
||||
<script src="js/pamela-matrices.js" type="text/javascript"></script>
|
||||
<script src="js/pamela.js" type="text/javascript"></script>
|
||||
<style type="text/css">
|
||||
* {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: <?php echo PAM_BGCOLOR; ?>;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="pamela"></canvas>
|
||||
</body>
|
||||
echo "<h2>Who's here right now?</h2>";
|
||||
echo "<ul>";
|
||||
foreach($array as $entry) {
|
||||
if(substr($entry,0,1) == "{") {
|
||||
echo "<li class='macaddr'>".$entry."</li>";
|
||||
}
|
||||
else{
|
||||
echo "<li>".$entry."</li>";
|
||||
}
|
||||
}
|
||||
echo "</ul>";
|
||||
|
||||
?>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
|
Before Width: | Height: | Size: 26 KiB After Width: | Height: | Size: 26 KiB |
Before Width: | Height: | Size: 88 KiB After Width: | Height: | Size: 88 KiB |
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
Before Width: | Height: | Size: 1.3 KiB After Width: | Height: | Size: 1.3 KiB |
Before Width: | Height: | Size: 1.0 KiB After Width: | Height: | Size: 1.0 KiB |
Before Width: | Height: | Size: 549 B After Width: | Height: | Size: 549 B |
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.1 KiB |
Before Width: | Height: | Size: 673 B After Width: | Height: | Size: 673 B |
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
Before Width: | Height: | Size: 28 KiB After Width: | Height: | Size: 28 KiB |
45
pamela/index.php
Executable file
|
@ -0,0 +1,45 @@
|
|||
<?php
|
||||
/*
|
||||
Copyright 2010 Pieter Iserbyt
|
||||
|
||||
This file is part of Pamela.
|
||||
|
||||
Pamela is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
Pamela is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with Pamela. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
require_once("config.php");
|
||||
?><html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head>
|
||||
<title>Pamela</title>
|
||||
<script src="js/jquery-1.3.2.js" type="text/javascript"></script>
|
||||
<script src="js/pamela-conf.php" type="text/javascript"></script>
|
||||
<script src="js/pamela-buttons.js" type="text/javascript"></script>
|
||||
<script src="js/pamela-nodes.js" type="text/javascript"></script>
|
||||
<script src="js/pamela-matrices.js" type="text/javascript"></script>
|
||||
<script src="js/pamela.js" type="text/javascript"></script>
|
||||
<style type="text/css">
|
||||
* {
|
||||
margin:0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
body {
|
||||
background-color: <?php echo PAM_BGCOLOR; ?>;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<canvas id="pamela"></canvas>
|
||||
</body>
|
||||
</html>
|
|
@ -26,11 +26,11 @@ PAM_CRON="/etc/cron.d/pamela"
|
|||
PAM_SCRIPT="${PAM_DIR}/$(basename $0)"
|
||||
REGISTER=''
|
||||
SIMULATE=''
|
||||
IF='eth0'
|
||||
OUT='http://yourserver.com/pamela/upload.php'
|
||||
IF='p2p1'
|
||||
OUT='http://yourserver.com/upload.php'
|
||||
USER=''
|
||||
PASSWORD=''
|
||||
TRANSLATE=''
|
||||
TRANSLATE='/var/www/html/mac_log.csv'
|
||||
POST=''
|
||||
TIMEOUT=200
|
||||
|
||||
|
@ -136,35 +136,45 @@ function translate {
|
|||
then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# translate denotes a url
|
||||
# save the output of the url to a file and use it as a file
|
||||
TRANSLATE_URL=${TRANSLATE}
|
||||
TRANSLATE=$(mktemp)
|
||||
|
||||
wget --timeout="${TIMEOUT}" --no-check-certificate --quiet -O "${TRANSLATE}" "${TRANSLATE_URL}"
|
||||
# clean old translations
|
||||
rm $TRANSLATE.complete
|
||||
|
||||
POST=$(echo ${POST} | awk -v names="${TRANSLATE}" 'BEGIN {
|
||||
# Then we fall back to names obtained via zeroconf (aka avahi, aka bonjour)
|
||||
#avahi-browse -a -t|grep :.*:.*:.*:|sed -e 's/.*IPv. \(.*\) \[\(.*\)].*/\2,\1[\2]/g' > $TRANSLATE.bon
|
||||
|
||||
# Finally we fall back to the name from arp-scan (maker of the network chipset)
|
||||
# Yes I know we already ran arp-scan once...I'm too lazy to do it right
|
||||
# And yes I'm using regex instead of learning how awk works.
|
||||
#arp-scan -I eth0 -R --localnet|sed -e 's/\(.*\)\t\(.*\)\t\(.*\)/\2,\3[\2]/g'|grep :.*:.*:> $TRANSLATE.arp
|
||||
|
||||
# Combine names from 3 sources to one
|
||||
# Note that the code below uses the last name to appear in the file
|
||||
# So order them accordingly
|
||||
#cat $TRANSLATE.bon $TRANSLATE.arp
|
||||
cat $TRANSLATE >> $TRANSLATE.complete
|
||||
|
||||
POST=$(echo ${POST} | awk -v names="${TRANSLATE}.complete" 'BEGIN {
|
||||
RS="\n"
|
||||
FS=","
|
||||
while ((getline nl < names) > 0) {
|
||||
split(nl, n);
|
||||
nms[n[1]] = n[2]
|
||||
}
|
||||
|
||||
close(names)
|
||||
RS=","
|
||||
first=1
|
||||
while ((getline i)> 0) {
|
||||
sub(/\n$/,"",i)
|
||||
#print "input:", i, "translates to", (i in nms?nms[i]:i)
|
||||
# if (i in nms){ print "input:", i, "translates to", nms[i] }
|
||||
if (!first)
|
||||
printf(",")
|
||||
printf (i in nms?nms[i]:i)
|
||||
first=0
|
||||
}
|
||||
}')
|
||||
|
||||
rm ${TRANSLATE}
|
||||
}')
|
||||
}
|
||||
|
||||
function upload {
|
||||
|
@ -191,3 +201,5 @@ scan
|
|||
translate
|
||||
upload
|
||||
|
||||
git commit mac_log.csv -m "Save updates user database"
|
||||
|