Kategori PHP

RRD Graphen über SNMP erstellen

Sonntag, Januar 30th, 2011

Hier Dokumentire ich mal wie wir im Wohnheim den Cisco Catalist 4006 über SNMP abfragen um RRD Graphen zu erstellen. Zuerst muss man auf den Cisco natürlich SNMP einschalten und ein Passwort Sätzen.

snmp-server community password RO
snmp-server enable traps tty

Als erstes müssen vollende Pakete installiert werden:
apt-get install php-cli snmp rrdtool

Dann habe ich ein Script geschrieben das die insgesamt 195 Port abfragt.

 
#!/usr/bin/php5
<?
 
//CISCO
for($i=1;$i<=195;$i++)
{
// RRD ERSTELLEN
   //system("rrdtool create bandwidth-". $i .".rrd --start N DS:in:COUNTER:600:U:U
DS:out:COUNTER:600:U:U RRA:AVERAGE:0.5:1:432");
 
// RRD LOGGEN
  system("/usr/bin/rrdupdate /usr/local/rrd/bandwidth-". $i .".rrd N:
`/usr/bin/snmpget -v1 -c password 192.168.1.1 -Oqv IF-MIB::ifInOctets.". $i ."`:
`/usr/bin/snmpget -v1 -c password 192.168.1.1 -Oqv IF-MIB::ifOutOctets.". $i ."`");
 
// RRD GRAPH
  system("/usr/bin/rrdtool graph /usr/local/rrd/img/bandwidth-". $i .".png
-a PNG -w 500 -h 150 -M -s -129600 -v \
`/usr/bin/snmpget -v1 -c password 192.168.1.1 -Oqv IF-MIB::ifDescr.". $i ."` \
    'DEF:in=/usr/local/rrd/bandwidth-". $i .".rrd:in:AVERAGE' \
    'DEF:out=/usr/local/rrd/bandwidth-". $i .".rrd:out:AVERAGE' \
    'CDEF:kbin=in,1024,/' \
    'CDEF:kbout=out,1024,/' \
    'AREA:in#00FF00:Bandwidth In' \
    'LINE1:out#0000FF:Bandwidth Out\j' \
    'GPRINT:kbin:LAST:Last Bandwidth In\:    %3.2lf KBps' \
    'GPRINT:kbout:LAST:Last Bandwidth Out\:   %3.2lf KBps\j' \
    'GPRINT:kbin:AVERAGE:Average Bandwidth In\: %3.2lf KBps' \
    'GPRINT:kbout:AVERAGE:Average Bandwidth Out\:%3.2lf KBps\j'");
}
?>

Das ganze sieht dann so aus, hier ist der Aktelle Graph des Netzwerk Trafik des Wohnheims:
network traffic

sudo für www-data auf ein Programm

Freitag, Januar 28th, 2011

Um für die Internet freischalte Anwendung im Wohnheim dem Apache root Rechte auf ein Programm zu geben, gibt es die Möglichkeit dies mit sudo und nopassword zumachen. Dafür Edition man die /etc/sudoers mit visudo und ergänzt dies mit einer solchen Zeile:

www-data ALL=NOPASSWD:/usr/sbin/arp

So kann der Befehl

$mac = system('sudo arp -a '. $_SERVER['REMOTE_ADDR'] .' | cut -d " " -f4');

instent die MAC Adresse für die IP des Client Rechners ermitteln, obwohl root rechte zum ausführen einer arp anfrage benötige werden.

MediaWiki LDAP benuzer

Freitag, November 19th, 2010

Bei der Installation eines MediaWikis mit LDAP Plugin als Benutzerauthentifizierung bin ich in folgende falle gelaufen. Trotz Debuggen "on" bekam ich nur Folgenden Fehler:

LoginForm::attemptAutoCreate: $wgAuth->authenticate() returned false, aborting

Zuerst mal sollte man überprüfen ob das PHP LDAP Modul aktiviert ist.

Dann müssen folgende Einstellungen in der LocalSettings.php eingetragen werden.

equire_once( "extensions/LdapAuthentication/LdapAuthentication.php" );
$wgAuth = new LdapAuthenticationPlugin();
 
$wgLDAPDomainNames = array( "blog.chr.istoph.de" );
$wgLDAPServerNames = array( "blog.chr.istoph.de" => "ldap.chr.istoph.de" );
$wgLDAPBaseDNs = array( "blog.chr.istoph.de"=>"dc=chr,dc=istoph,dc=de" );
$wgLDAPSearchAttributes = array( "blog.chr.istoph.de" => "uid" );
$wgLDAPSearchStrings = array( "blog.chr.istoph.de" => "uid=USER-NAME,ou=people,dc=chr,dc=istoph,dc=de" );

MySQL Unix Socket weiterleiten

Samstag, November 13th, 2010

Wenn man bei einer LAMP System den Datenbankserver auf eine extra Maschine legen muss, hat man dank PHP etwas Stress mit dem unterschied zwischen localhost und 127.0.0.1 bzw ::1. Das liegt daran der UNIX Socket bei mein match auf localhost fest einkompiliert ist.

Mit socat kann man den Unix Socket zum Glück umleiten:
socat UNIX-LISTEN:/var/lib/mysql/mysql.sock,fork,user=mysql,group=mysql,mode=777 TCP:localhost:3306 2> /dev/null &

Mit rinetd kann man diese dann auf eine IP Weiterleiten.

Importscript von Drupal nach WordPress

Samstag, März 6th, 2010

Endlich hat der AStA eine neue Webseite. Was auffällt ist vermutlich das Kopfzeilen Hintergründigbild das meinem vielleicht ein bisschen ähnelt. Die Jungs vom AStA haben beim anschauen meines Blogs ein bisschen inspirieren lassen. Toll an dem Bild, das ich von meinem Turm geschossen habe, ist nämlich das es die sich um die Sicht der ganzen FH-Aachen auf Aachen handelt, da alle Standorte sich hinter dem HBF befinden. Ich habe dafür einen Importscript von Drupal nach WordPress geschrieben. Wie immer habe ich es als PHP_CLI Anwendung auf der Konsole gemacht.

(weiterlesen …)

PHP: ldap_sort() case sensitivity

Freitag, November 6th, 2009

Irgend wie ist die PHP Funktion ldap_sort() gaggi, den sie sortiert case sensitivity erst alles was groß ist und dann alles was klein ist. Da das keinen Sinn mach habe ich das mal per Hand geschrieben:

foreach($result as $key => $value)
	if(is_int($key))
		$a[$key] = strtolower($value[GIVENNAME][0]);  //Order By
asort($a);
$b['count'] = $result['count'];
$i=0;
foreach($a as $key => $value)
	$b[$i++] = $result[$key];
//print_r($b)

PHP CLI Bug

Mittwoch, Juni 3rd, 2009

Oh man wie dämlich war den das. Im Errorlog tauchte folgende Fehlermeldung auf:
[03-Jun-2009 10:11:50] PHP Warning: include_once(1): failed to open stream: No such file or directory in /var/www/... on line 8
Line 8 Besagt: include_once("/var/www/include/inc.php");

Das in meinem Log include_once(1) stand hat mich dann doch etwas stutzig gemacht. Als ich das dann nach (string) getypecastet habe wir mir klar das ist ein Bug.
include_once((string)"/var/www/include/inc.php");
include_once('/var/www/include/inc.php');

Aufgetreten unter Fedora Core 9 PHP Version 5.2.6

Internet Explorer und die interpretation von Buttons

Dienstag, Dezember 16th, 2008

Komischer weise ist das mir noch nie aufgefallen aber als ich heute einen Bug fixen sollte, war ich mal wieder richtig geschockt wie sich der IE mal wieder mit Händen und Füßen gegen Standards wärt.

<button type="submit" name="mode" value="preview">Vorschau</button>
<button type="submit" name="mode" value="insert">speichern</button>

Beim klicken auf den Button "Vorschau" passiert folgendes:

  • Der IE 6 (und älter) überträgt mode=Vorschau&mode=speichern
    - das Script wertet den letzten Wert aus, also mode=speichern
  • Der IE 7 überträgt mode=Vorschau
  • Opera und Firefox übertragen mode=preview

So bekam ich im IE eine PHP Error, den ich mir nicht erklären konnte da im FE lief alles lief. Und normalerweise PHP ja auf dem Server kompiliert. Da aber im value eine ID stand und im dem IE ein Sting übergeben wurde, war der fehler gefunden.

Lösung:
Entweder hidden Felder nutzen oder links verwenden.

Quelle: notizen.joergkrusesweb.de

nslookup for validate e-mail

Montag, September 8th, 2008

Da hat mich Chef doch mal wieder auf eine Interessante Idee gebracht. Um zu überprüfen ob eine E-Mail Adresse existiert, haben wir einen nslookup auf den MX Eintrag der Domain gemacht. So finden wir her raus ob eine E-Mail überhaut zugestellt werden kann.

Dies könnte man jetzt noch weiter übertreiben, in den man eine Verbindung nach 25 aufmacht und testet ob der Empfänger existiert. Dies ist aber auf Grund von Graylisting nicht möglich.

function nslookupMX($email)
{
  list($user,$domain) = split("@",$email);
  //TODO: NSLOOKUP php function nutzen
  exec('nslookup -q=mx '. $domain, $nslookup);
  // Non-authoritative answer
  // NXDOMAIN
  foreach($nslookup as $value)
  {
    // Schlüssel wörter von nslookup feddora 9 ggf. anpassen.
    if(strpos($value, 'NXDOMAIN') || strpos($value, 'Non-authoritative'))
    {
      return false;
    }
  }
  return true;
}

Beispiel Code! Code so nicht im Einsatz! Durch die excec function ist die function anfällig für hecking.