Tuesday, March 20, 2012

Create an associative array in PHP

Some of you may dislike the distraction of a full set of working code with core lesson of associative arrays buried in it. Their are plenty of minimalist examples on the web, and when I wanted an example they were too minimalist. Core code for reference is in this color scheme.

deviceNickNames.txt
10.AF2551010800|no nickname
22.20F21A000000|no nickname
22.650E1B000000|no nickname
29.A29F09000000|no nickname
$deviceNickNamesTxt = "deviceNickNames.txt";
 if (file_exists($deviceNickNamesTxt)) {  
     $lines=explode("\n", file_get_contents($deviceNickNamesTxt)); 
       foreach($lines as $line) { 
                                 $items=explode("|",$line);
                          if(isset($items[1])) { $devicesB[$items[0]]= $items[1]; } 
                    }
                                     }

print "\n<form name=\"setupForm\" action=\"\" method=\"GET\">\n<table>\n<tr><th>Device Hardcoded Name</th><th>Human Friendly Name</th></tr>\n";
foreach($devicesB as $name => $value) {
print "\n<tr>";
print "\n<td valign=\"center\" align=\"center\">".$name."</td>";
print "\n<td valign=\"center\" align=\"center\">\n";
inputText($name."_NAME", $value, "");
submit("");
print "</td>\n</tr>\n";
    }
print "\n</table>\n</form>\n"
Device Hardcoded NameHuman Friendly Name
10.AF2551010800
22.20F21A000000
22.650E1B000000
29.A29F09000000

Friday, March 9, 2012

Boiler plate ajax.php file

Hello, I am /ajax.php
To make me work properly please send GET or POST data
I am designed to not need editing, all the things you want to add to my functionality
should be written in a file called /home/cyr/public_html/inc/ajax.txt
Also, I am intelligent enough to see there is no /home/cyr/public_html/inc/ajax.txt
I leave it up to you to create that.
Below is /home/cyr/public_html/ajax.php source code
===============================
<?php
if(isset($_GET['test'])) { error_reporting(E_ALL);ini_set('display_errors', '1'); }
if(isset($_POST['test'])) { error_reporting(E_ALL);ini_set('display_errors', '1'); }
header("Content-Type: text/plain");
$page=getenv("SCRIPT_NAME"); 
$query=getenv("QUERY_STRING");
$referer=getenv("HTTP_REFERER"); 
$ip=getenv("REMOTE_ADDR");
$docRoot=getenv('DOCUMENT_ROOT');
if(isset($_GET['test'])) { foreach($_GET as $name => $value) { print "\n".$name." : ".$value; } die();}
if(isset($_POST['test'])) { foreach($_POST as $name => $value) { print "\n".$name." : ".$value; } die();}
$includesDir="inc";
$includesDir=getcwd()."/".$includesDir;
$file=$includesDir."/".basename($page,"php")."txt";
if((count($_GET) < 1) && (count($_POST) < 1)) {
 print "Hello, I am ".$page."\n";
 print "To make me work properly please send GET or POST data\n";
 print "I am designed to not need editing, all the things you want to add to my functionality\n";
 print "should be written in a file called ".$file."\n";
  if(!is_dir($includesDir)) { print "Also, I see there is no ".$includesDir."\nPlease create this directory and place a file named '".basename($page,"php")."txt' in it";}   
  elseif(!is_file($file)) { print "Also, I am intelligent enough to see there is no ".$file."\nI leave it up to you to create that.\n"; }
  
  print "Below is ".$_SERVER['SCRIPT_FILENAME']." source code\n===============================\n";
  print file_get_contents($_SERVER['SCRIPT_FILENAME']);
  print "\n";
 if (is_file($file)) {
 print "Below is ".$file." source code\n===============================\n";
  print file_get_contents($file);
 } 
 die();
                                               }  
is_file($file) ?  include($file) : print $file." does not exist"; 
die();
?>

Wednesday, February 29, 2012

netdiscover

Not saying anything smart in this post, just placing here as note to self about the name of this tool and basic commands to get it started if I'm on a new machine that needs it.



sudo apt-get install netdiscover
sudo netdiscover
sudo netdiscover -r 192.168.1.0/24
sudo netdiscover -i wlan0 -r 192.168.1.0/24
sudo netdiscover -h
Netdiscover 0.3-beta7 [Active/passive arp reconnaissance tool]
Written by: Jaime Penalba 

Usage: netdiscover [-i device] [-r range | -l file | -p] [-s time] [-n node] [-c count] [-f] [-d] [-S] [-P] [-C]
  -i device: your network device
  -r range: scan a given range instead of auto scan. 192.168.6.0/24,/16,/8
  -l file: scan the list of ranges contained into the given file
  -p passive mode: do not send anything, only sniff
  -F filter: Customize pcap filter expression (default: "arp")
  -s time: time to sleep between each arp request (miliseconds)
  -n node: last ip octet used for scanning (from 2 to 253)
  -c count: number of times to send each arp reques (for nets with packet loss)
  -f enable fastmode scan, saves a lot of time, recommended for auto
  -d ignore home config files for autoscan and fast mode
  -S enable sleep time supression betwen each request (hardcore mode)
  -P print results in a format suitable for parsing by another program
  -L in parsable output mode (-P), continue listening after the active scan is completed

If -r, -l or -p are not enabled, netdiscover will scan for common lan addresses.

Thursday, January 19, 2012

Print just the name of the running Python program

#!/usr/bin/env python
import sys
import os
for i in sys.argv:
        print i
print sys.argv[0]
print os.path.basename(sys.argv[0].split(".")[0])
#>bin/test.py 56 555
bin/test.py
56
555
bin/test.py
test

Sunday, January 1, 2012

MySQL Connect in Python

#!/usr/bin/env python
import pymysql

conn = pymysql.connect(host='localhost', user='root', passwd='cyrushellborg666', db='brewing')
cur = conn.cursor()
cur.execute("SHOW TABLES")
# print cur.description
# r = cur.fetchall()
# print r
# ...or...
for r in cur:
   print r
cur.close()
conn.close()

Friday, December 30, 2011

Basic timer in Python

#!/usr/bin/env python


import time
import threading

class Timer(threading.Thread):
  def __init__(self, seconds):
   self.runTime = seconds
   threading.Thread.__init__(self)
  def run(self):
   time.sleep(self.runTime)
   print "Buzzzz!! Time's up!"

class CountDownTimer(Timer):
  def run(self):
   counter = self.runTime
   for sec in range(self.runTime):
    print counter
    time.sleep(1.0)
    counter -= 1
   print "Done."


class CountDownExec(CountDownTimer):   
  def __init__(self, seconds, action):  
   self.action = action    
   CountDownTimer.__init__(self, seconds) 
  def run(self):      
   CountDownTimer.run(self)   
   self.action()     
   
def myAction():      
  print "Performing my action..."   



c = CountDownExec(10, myAction)
c.start()
#>./timer.py 
10
9
8
7
6
5
4
3
2
1
Done.
Performing my action...

1wire generalized PHP script

<?php
$ow
="/mnt/1wire";
print 
"<table border=\"1\" padding=\"4\" >\n";
print 
"<tr><th>Full Path</th><th>Device</th><th>File</th><th>File Contents</th></tr>\n";
if (
$owhdl = opendir($ow)) {
    while (
false !== ($a = readdir($owhdl))) {
        
$aArray = explode('.',$a);      
        if ( (
count($aArray) == 2) && (strlen($aArray[0]) == 2 )) {
             if (
$owahdl = opendir($ow."/".$a)) {
                   while (
false !== ($b = readdir($owahdl))) {
                           
$c=$ow."/".$a."/".$b;  
                               if (
file_exists($c)) {
                        
$contents = fopen($c, "r");
                                
$parameter=array_pop(explode("/",$c));
                    
$fc=fgets($contents); 
                            print 
"\n<tr><td>".$ow."/</td>\n<td>".$a."</td>";
                    print 
"\n<td>".$parameter."</td>\n<td>\n";
                    
$parameter=="type" ? print "<a target=\"_blank\" href=\"http://www.owfs.org/uploads/".$fc.".html\">".$fc."</a>" : print $fc;
                    print 
"\n</td></tr>\n";
                            
fclose($contents);
                                            }
                                    }
                    
closedir($owahdl);
                    }
                }
           }
    
closedir($owhdl);
}
print 
"\n</table>\n";
print 
"<br />";
highlight_file($docRoot."/inc/index.txt");
?>



Full PathDeviceFileFile Contents
/mnt/1wire/ 10.AF2551010800 address 10AF255101080023
/mnt/1wire/ 10.AF2551010800 alias
/mnt/1wire/ 10.AF2551010800 crc8 23
/mnt/1wire/ 10.AF2551010800 errata
/mnt/1wire/ 10.AF2551010800 family 10
/mnt/1wire/ 10.AF2551010800 id AF2551010800
/mnt/1wire/ 10.AF2551010800 locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 10.AF2551010800 power 0
/mnt/1wire/ 10.AF2551010800 present 1
/mnt/1wire/ 10.AF2551010800 r_address 230008015125AF10
/mnt/1wire/ 10.AF2551010800 r_id 0008015125AF
/mnt/1wire/ 10.AF2551010800 r_locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 10.AF2551010800 temperature 39.9875
/mnt/1wire/ 10.AF2551010800 temphigh 167
/mnt/1wire/ 10.AF2551010800 templow 158
/mnt/1wire/ 10.AF2551010800 type DS18S20
/mnt/1wire/ 10.AF2551010800 .
/mnt/1wire/ 10.AF2551010800 ..
/mnt/1wire/ 22.20F21A000000 address 2220F21A00000025
/mnt/1wire/ 22.20F21A000000 alias
/mnt/1wire/ 22.20F21A000000 crc8 25
/mnt/1wire/ 22.20F21A000000 errata
/mnt/1wire/ 22.20F21A000000 family 22
/mnt/1wire/ 22.20F21A000000 fasttemp 62.6
/mnt/1wire/ 22.20F21A000000 id 20F21A000000
/mnt/1wire/ 22.20F21A000000 locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 22.20F21A000000 power 1
/mnt/1wire/ 22.20F21A000000 present 1
/mnt/1wire/ 22.20F21A000000 r_address 250000001AF22022
/mnt/1wire/ 22.20F21A000000 r_id 0000001AF220
/mnt/1wire/ 22.20F21A000000 r_locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 22.20F21A000000 temperature 63.275
/mnt/1wire/ 22.20F21A000000 temperature10 63.05
/mnt/1wire/ 22.20F21A000000 temperature11 63.5
/mnt/1wire/ 22.20F21A000000 temperature12 63.275
/mnt/1wire/ 22.20F21A000000 temperature9 62.6
/mnt/1wire/ 22.20F21A000000 temphigh 167
/mnt/1wire/ 22.20F21A000000 templow 158
/mnt/1wire/ 22.20F21A000000 type DS1822
/mnt/1wire/ 22.20F21A000000 .
/mnt/1wire/ 22.20F21A000000 ..
/mnt/1wire/ 22.650E1B000000 address 22650E1B000000B3
/mnt/1wire/ 22.650E1B000000 alias
/mnt/1wire/ 22.650E1B000000 crc8 B3
/mnt/1wire/ 22.650E1B000000 errata
/mnt/1wire/ 22.650E1B000000 family 22
/mnt/1wire/ 22.650E1B000000 fasttemp 45.5
/mnt/1wire/ 22.650E1B000000 id 650E1B000000
/mnt/1wire/ 22.650E1B000000 locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 22.650E1B000000 power 1
/mnt/1wire/ 22.650E1B000000 present 1
/mnt/1wire/ 22.650E1B000000 r_address B30000001B0E6522
/mnt/1wire/ 22.650E1B000000 r_id 0000001B0E65
/mnt/1wire/ 22.650E1B000000 r_locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 22.650E1B000000 temperature 45.3875
/mnt/1wire/ 22.650E1B000000 temperature10 45.5
/mnt/1wire/ 22.650E1B000000 temperature11 45.5
/mnt/1wire/ 22.650E1B000000 temperature12 45.3875
/mnt/1wire/ 22.650E1B000000 temperature9 45.5
/mnt/1wire/ 22.650E1B000000 temphigh 167
/mnt/1wire/ 22.650E1B000000 templow 158
/mnt/1wire/ 22.650E1B000000 type DS1822
/mnt/1wire/ 22.650E1B000000 .
/mnt/1wire/ 22.650E1B000000 ..
/mnt/1wire/ 29.A29F09000000 LCD_H
/mnt/1wire/ 29.A29F09000000 LCD_M
/mnt/1wire/ 29.A29F09000000 PIO.BYTE 0
/mnt/1wire/ 29.A29F09000000 PIO.ALL 0,0,0,0,0,0,0,0
/mnt/1wire/ 29.A29F09000000 PIO.0 0
/mnt/1wire/ 29.A29F09000000 PIO.1 0
/mnt/1wire/ 29.A29F09000000 PIO.2 0
/mnt/1wire/ 29.A29F09000000 PIO.3 0
/mnt/1wire/ 29.A29F09000000 PIO.4 0
/mnt/1wire/ 29.A29F09000000 PIO.5 0
/mnt/1wire/ 29.A29F09000000 PIO.6 0
/mnt/1wire/ 29.A29F09000000 PIO.7 0
/mnt/1wire/ 29.A29F09000000 address 29A29F090000005A
/mnt/1wire/ 29.A29F09000000 alias
/mnt/1wire/ 29.A29F09000000 crc8 5A
/mnt/1wire/ 29.A29F09000000 family 29
/mnt/1wire/ 29.A29F09000000 id A29F09000000
/mnt/1wire/ 29.A29F09000000 latch.BYTE 255
/mnt/1wire/ 29.A29F09000000 latch.ALL 1,1,1,1,1,1,1,1
/mnt/1wire/ 29.A29F09000000 latch.0 1
/mnt/1wire/ 29.A29F09000000 latch.1 1
/mnt/1wire/ 29.A29F09000000 latch.2 1
/mnt/1wire/ 29.A29F09000000 latch.3 1
/mnt/1wire/ 29.A29F09000000 latch.4 1
/mnt/1wire/ 29.A29F09000000 latch.5 1
/mnt/1wire/ 29.A29F09000000 latch.6 1
/mnt/1wire/ 29.A29F09000000 latch.7 1
/mnt/1wire/ 29.A29F09000000 locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 29.A29F09000000 por 1
/mnt/1wire/ 29.A29F09000000 power 1
/mnt/1wire/ 29.A29F09000000 present 1
/mnt/1wire/ 29.A29F09000000 r_address 5A000000099FA229
/mnt/1wire/ 29.A29F09000000 r_id 000000099FA2
/mnt/1wire/ 29.A29F09000000 r_locator FFFFFFFFFFFFFFFF
/mnt/1wire/ 29.A29F09000000 sensed.BYTE 255
/mnt/1wire/ 29.A29F09000000 sensed.ALL 1,1,1,1,1,1,1,1
/mnt/1wire/ 29.A29F09000000 sensed.0 1
/mnt/1wire/ 29.A29F09000000 sensed.1 1
/mnt/1wire/ 29.A29F09000000 sensed.2 1
/mnt/1wire/ 29.A29F09000000 sensed.3 1
/mnt/1wire/ 29.A29F09000000 sensed.4 1
/mnt/1wire/ 29.A29F09000000 sensed.5 1
/mnt/1wire/ 29.A29F09000000 sensed.6 1
/mnt/1wire/ 29.A29F09000000 sensed.7 1
/mnt/1wire/ 29.A29F09000000 set_alarm 0
/mnt/1wire/ 29.A29F09000000 strobe 0
/mnt/1wire/ 29.A29F09000000 type DS2408
/mnt/1wire/ 29.A29F09000000 .
/mnt/1wire/ 29.A29F09000000 ..