Habe eine andere signatur die ich irgendwann mal bei mir gespeichert hatte.
Sie kann die Ip´s von den anderen auslesen, und welches Betriebsystem hat usw.
ANLEITUNG:
Die Signatur besteht aus 2 PHP-Dateien, 2 Bildern und einem Verzeichnis (smilie)...
In den Dateien werden die Schritte auch dokumentiert!
Das meiste ist aus Codeschnipseln erstellt. Deswegen auch frei...
Als erstes wenden wir uns der function_signatur.php zu. Sie beinhaltet die wichtigsten Funktionen für die Signatur:
PHP Code:
<?php
//Dieses Skript wurde von Changer geschrieben.....
//Es ist frei und darf auch weitergeben werden
// Changer von [URL]http://www.infinity-community.com[/URL]
// Betriebsysstem-Erkennung Übergabe des $HTTP_USER_AGENT
// mit $what = 0 ist die rückgabe z.B. winxp
// mit $what = 1 ist die rückgabe z.B. Windows XP
function betriebssystem($user_agent,$what=1){
$betriebssystem = "";
$pattern[] = "=win(dows)?="; $name[] = "win"; $name2[] = "Windows";
$pattern[] = "=win(dows)?(.)*(95)="; $name[] = "win95"; $name2[] = "Windows";
$pattern[] = "=win(dows)?(.)*(98)="; $name[] = "win98"; $name2[] = "Windows 98";
$pattern[] = "=win(dows)?(.)*(me|9x 4.90)="; $name[] = "winme"; $name2[] = "Windows ME";
$pattern[] = "=win(dows)?(.)*(nt)="; $name[] = "winnt"; $name2[] = "Windows NT 4.0";
$pattern[] = "=win(dows)?(.)*(2k|2000|nt 5.0)="; $name[] = "win2k"; $name2[] = "Windows 2000";
$pattern[] = "=win(dows)?(.)*(xp|nt 5.1)="; $name[] = "winxp"; $name2[] = "Windows XP";
$pattern[] = "=win(dows)?(.)*(.net)="; $name[] = "winnet"; $name2[] = "Windows .Net";
$pattern[] = "=(mac)="; $name[] = "mac"; $name2[] = "Macintosh";
$pattern[] = "=(ppc)="; $name[] = "mac"; $name2[] = "Macintosh PowerPC";
$pattern[] = "=(linux|lynx|x11)="; $name[] = "linux"; $name2[] = "Linux";
$pattern[] = "=(solaris|sun)="; $name[] = "unix"; $name2[] = "Sun Solaris";
$pattern[] = "=(silicon)="; $name[] = "unix"; $name2[] = "Silicon Graphics";
$pattern[] = "=(hp-ux)="; $name[] = "unix"; $name2[] = "HP-UX";
$pattern[] = "=(amiga)="; $name[] = "unix"; $name2[] = "Amiga";
$pattern[] = "=(freebsd|bsd)="; $name[] = "unix"; $name2[] = "Free BSD";
$pattern[] = "=(os/2)="; $name[] = "unix"; $name2[] = "OS/2";
for($p=0;$p<count($pattern);$p++){
if(preg_match($pattern[$p],strtolower($user_agent))){
if($what==0){
$betriebssystem = $name[$p];
}
else{
$betriebssystem = $name2[$p];
}
}
}
if($betriebssystem==""){
if($what==0){
$betriebssystem = "unix";
}else{
$betriebssystem = "unbekannt";
}
}
return($betriebssystem);
}
// Browser erkennung uebergabe des $HTTP_USER_AGENT
// mit $what = 0 ist die rückgabe z.B. ie.5.5
// mit $what = 1 ist die rückgabe z.B. Internet Explorer 5.5
function browser($user_agent,$what=1){
$browser = $version = "";
// die reihenfolge der $pattern darf nicht veraendert werden
// Netscape
$pattern[] = "=mozilla([s/.d]*)="; $name[] = "ne"; $name2[] = "Netscape Navigator";
// Mozilla
$pattern[] = "=mozilla.*(rv:[d.]+)="; $name[] = "mz"; $name2[] = "Mozilla";
// Netscape
$pattern[] = "=netscape([s/.d]*)="; $name[] = "ne"; $name2[] = "Netscape Navigator";
// Netscape
$pattern[] = "=netscape[0-9]/([/.d]*)="; $name[] = "ne"; $name2[] = "Netscape Navigator";
// Opera
$pattern[] = "=opera([s/.d]*)="; $name[] = "op"; $name2[] = "Opera";
// Internet Explorer
$pattern[] = "=ie([s.d]*)="; $name[] = "ie"; $name2[] = "Internet Explorer";
for($p=0;$p<count($pattern);$p++){
if(preg_match($pattern[$p],strtolower($user_agent),$ret2)){
if($ret2[1]!=""){
$version = preg_replace("([/s:a-z])","",$ret2[1]);
}
if($what==0){
$browser = $name[$p].".".$version;
}else{
$browser = $name2[$p]." ".$version;
}
}
}
if($browser==""){
if($what==0){
$browser = "ne.4.0";
}else{
$browser = "unbekannt";
}
}
return ($browser);
}
//Provider Erkennung
function provider($h, $s, $e){
$sp = strpos($h, $s, 0) + strlen($s);
$ep = strpos($h, $e, 0);
$page = substr($h, $sp, $ep-$sp);
$string_count = substr_count("$page", "descr:");
if ($string_count > 0){
$s =" ";
$e="descr:";
$sp = strpos($page, $s, 0) + strlen($s);
$ep = strpos($page, $e, 0);
$page = substr($page, $sp, $ep-$sp);
}
return ($page);
}
// Anfang Smilie auslesen
// Anfang Smilie Verzeichnis auslesen
$folder= "./smilie/";
$open=opendir("$folder");
while ($file = readdir($open))
$smilie[count($smilie)] = $file;
closedir($open);
// Ende Smilie Verzeichnis auslesen
// Anfang Sortieren der Filenames im Array
sort($smilie);
// Ende Sortieren der Filenames im Array
//Anfang Entfernen was kein Bild ist im Array
$tempvar=0;
for ($i=0;$smilie[$i];$i++){
$ext=strtolower(substr($smilie[$i],-4));
if ($ext==".png"){$smilie1[$tempvar]=$smilie[$i];$tempvar++;}
}
//Ende Entfernen was kein Bild ist im Array
// Anfang Zufalls-Smilie
if(count($smilie1) != 1){
srand ((double) microtime() * 10000000);
$rand_keys = array_rand ($smilie1, 2);
$smilie=$smilie1[$rand_keys[0]];
}else{
$smilie = $smilie1[$i];
}
// Ende Zufalls-Smilie
// Ende Smilie auslesen
?>
In den Zeilen 8-91 wird eigelich nur das Betriebsystem und der Browser ausgelesen... Diese Daten werden auch vom Browser mitgeliefert. Wer also auf seinem Rechner die richtigen Tools installiert hat, kann dies natürlich auch ändern und falsche Daten an das Skript liefern.
Die Zeilen 94-107 sind das Herz des ganzen... Und das ist genau das wo vielen das Herz in die Hose rutscht... Habe ich selbst erlebt.... großes Grinsen großes Grinsen
Diese Funktion liest eine in den Speicher geladenen Seite aus und gibt einen Wert zurück der zwischen $s und $e liegt.... In diesem Fall wird die IP-Adresse über www.ripe.net abgefragt und in den Speicher geladen. Der Wert $s wird auf "descr:" und der Wert $e auf "country:" gesetzt.....
Genau dazwischen liegt der Name des Providers..... wink wink
In den Zeilen 111-137 wird das Verzeichnis /smilie ausgelesen. Desweiteren geht das Skript hin und entfernt alle Dateien die kein Bild für das Skript sind. In diesem Fall sind nur Dateien mit der Endung .png ein Bild.
In den Zeilen 131-137 wird ein Zufallssmilie ausgewählt. Aber nur wenn mehr wie 1 Smilie im Verzeichnis liegt!!
Jetzt kommen wird zur Datei signature.php. Mit ihr wird die Signatur erstellt. Aber auch in ihr finden wir noch ein paar wichtige Funktionen!!!
PHP Code:
<?
//Dieses Skript wurde von Changer geschrieben.....
//Es ist frei und darf auch weitergeben werden
// Changer von [URL]http://www.infinity-community.com[/URL]
include("function_signatur.php");
// Anfang Domain zulassen
$erlaube = array("www.infinity-community.com");
$host = getenv("HTTP_REFERER");
if(empty($host)) {
$host = "http://www.infinity-community.com/";
$host = parse_url($host);
}else{
$host = parse_url(getenv("HTTP_REFERER"));
}
$host = "$host[host]";
if (!in_array($host, $erlaube)){
header("Content-Type: image/png");
$vorlage = imagecreatefrompng("fehler.png");
$txtcolor = imagecolorallocate ($vorlage, 255, 0, 0);
$text = "Die Abfrage kann von $host nicht ausgeführt werden!";
$text2 = "Bitte wende Dich an [EMAIL]changer@infinity-community.com[/EMAIL]";
imagestring($vorlage, 2, 30, 2, $text, $txtcolor);
imagestring($vorlage, 2, 30, 14, $text2, $txtcolor);
Imagepng($vorlage,'',100);
ImageDestroy($vorlage);
exit;
}
// Ende Domain zulassen
$plattform= betriebssystem($HTTP_USER_AGENT);//Betriebssystem-Erkennung
$browser=browser($HTTP_USER_AGENT);//Browser-Erkennung
$ipadresse=getenv("REMOTE_ADDR"); // IP-Adresse auslesen
$user_host = GETHOSTBYADDR($ipadresse); //Hostname auslesen
// Ab hier startet das Auslesen des Providers
$provider = implode("", file("http://www.ripe.net/perl/whois?form_type=simple&full_query_string=&searchtext=$ipadresse"));
$start = "descr: ";
$end = "country:";
$provider = provider($provider, $start, $end);
//Ende Auslesen Provider
// Anfang Bild erstellen
header("Content-Type: image/png");
$provider= ltrim(chop($provider));
/*if(strlen($provider) >=21){
$provider = ereg_replace($provider, 'Providername zu lang', $provider);
}*/
if($provider =="xDSL Pool"){
$provider = ereg_replace('xDSL Pool', 'NetCologne', $provider);
}
$plattform = "Dein Betriebssystem: $plattform";
$browser = "Dein Browser: $browser";
$ipadresse = "Deine IP: $ipadresse";
$user_host = "Hostname: $user_host";
$provider = "Dein Provider: $provider";
$vorlage = imagecreatefrompng("signature.png");
$vorlage_smilie= imagecreatefrompng("$folder$smilie");
$vorlage_size = getimagesize("$folder$smilie");
$txtcolor = imagecolorallocate ($vorlage, 255, 0, 0);
imagestring($vorlage, 2, 4, 2, $plattform, $txtcolor);
imagestring($vorlage, 2, 4, 18, $browser, $txtcolor);
imagestring($vorlage, 2, 250, 2, $ipadresse, $txtcolor);
imagestring($vorlage, 2, 250, 18, $user_host, $txtcolor);
imagestring($vorlage, 2, 4, 33, $provider, $txtcolor);
imagecopy($vorlage, $vorlage_smilie, 224, 7, 0, 0, $vorlage_size[0], $vorlage_size[1]);
Imagepng($vorlage,'',100);
ImageDestroy($vorlage);
ImageDestroy($vorlage_smilie);
//Ende Bild erstellen
?>
Von Zeile 8-28 wird die Domain ausgelesen, von wo die Signatur abgefragt wird. Ist eine Domain nicht in den Array eingetragen (siehe weiter unten), bekommt derjenige der die Signatur sieht einen Fehler angezeigt.
In der Zeile 8 wird die Domain eingetragen, wo die Signatur betrieben werden darf. Will man mehrere Domains einragen muß der Array wie folgt aussehen:
"$erlaube = array("www.infinity-community.com", "www.meine2tedomain.de", "www.meine3tedomain.de");"
In Zeile 31-34 werden verschiedene Daten vom Browser ausgelesen.
Nun kommen wir zu den Zeilen in denen Der Provider ausgelesen wird (Zeile 37-40).
Wie Ihr seht wird das Ganze über www.ripe.net gemacht.
Die Zeile 44 gibt nur an als was für ein Bildtyp die Signatur an den Browser zurückgegeben werden soll.
In der Zeile 45 werden aus Variable $provider Leerzeichen, Tabulatoren und Zeilenvorschübe entfernt.
Zeile 46-48 habe ich in ein REM gesetzt (Wird vom PHP-Interpreter nicht ausgewertet). Dort wird überprüft ob der Providername nicht die Zeichenlänge von 20 Zeichen überschreitet. Da ansonsten der Name über die Signatur hinausgeht... Kann aber ruhig wieder aktiviert werden. Einfach die Zeichen /* und */ entfernen.
In den Zeilen 49-51 habe ich einen Provider genommen der nicht seinen richtigen Namen eingesetzt hat (kommt von www.ripe.net). Hier wird der ursrüngliche Namen mit dem richtigen ersetzt.
Will man noch andere Provider mit dem Namen ersetzen müssen die folgenden Zeilen wie folgt aussehen:
"elseif($provider =="Der Name von ripe.net"){
$provider = ereg_replace('Der Name von ripe.net', 'Der neue Name', $provider);
}"
In den Zeilen 52-56 werden die Texte vorbereitet die anschließend auf der Signatur erscheinen.
Nun kommen die letzten Zeilen 57-69.... Dort ensteht nun die Signatur.
Sollte das jemand in einem Forum einstellen wollen, muß er auch beachten das PHP als Bildtyp erlaubt ist...
Als Admin sollte man das aber anschließend wieder deaktivieren!!!!!
Im Anhang findet Ihr die komplette Signatur.
Wenn Fragen bestehen, werde ich sie gerne beantworten.
Meldet Euch einfach dafür im Forum Grafik-Webdesign.
Nochmal zum nachlesenLink
Lesezeichen