 | | Txt Forum, Bilder & Videos |
|---|
|
| Forum |
|---|
Nicht identifiziertes Netzwerk/Internet geht nicht: Schritte - Monday, 26. March 2012 mgutt schrieb:
In jedem Fall eine Option: http://www.thewindowsclub.com/monitor-changes-in-the-windows-7-registry Zitat:
To use fc.exe, first, export a .reg file, & name it as say rega.
After the change takes place export the changed .reg file & name it as say, regb.
Now, open a command prompt and type:
fc /u rega.reg regb.reg > regcompare.txt
Since .reg files use unicode, the /u switch, tells fc.exe to use Unicode.
You can now inspect the output regcompare in Notepad.
oder so  | Nicht identifiziertes Netzwerk/Internet geht nicht: Schritte - Monday, 26. March 2012 In jedem Fall eine Option: http://www.thewindowsclub.com/monitor-changes-in-the-windows-7-registry Zitat:
To use fc.exe, first, export a .reg file, & name it as say rega.
After the change takes place export the changed .reg file & name it as say, regb.
Now, open a command prompt and type:
fc /u rega.reg regb.reg > regcompare.txt
Since .reg files use unicode, the /u switch, tells fc.exe to use Unicode.
You can now inspect the output regcompare in Notepad. | Domainnamen ermitteln - Thursday, 8. March 2012 Diese Herausforderung ist kaum zu stemmen, denn es gibt viele Domains wie z.B. http://bbc.co.uk/ (bbc.co.uk) oder http://www.db.de/ (db.de), die einen allgemeinen Filter unmöglich machen. Dazu kommen aber noch viele andere Varianten wie z.B. http://big.uk.com/ (big.uk.com) oder http://www.uk.com/ (uk.com).
Daher habe ich eine Filter-Funktion realisiert, die sich die Mozilla Public Suffix List zu nutze macht und die ohne Regex auskommt und dazu eine sehr hohe Genauigkeit besitzt.
Code:<?php function createTLD($cache_filename, $max_tl=2) { $cache_folder = str_replace(basename($cache_filename), '', $cache_filename); if (!file_exists($cache_folder) || !is_writable($cache_folder)) { throw new Exception($cache_folder . ' is not writable!'); } // feel free to use "fsockopen()" or "curl_init()" if "fopen wrappers" are disabled or "memory_limit" is to low $tlds = @file('http://mxr.mozilla.org/mozilla-central/source/netwerk/dns/effective_tld_names.dat?raw=1'); if ($tlds === false) { throw new Exception('effective_tld_names.dat is not readable!'); } $i = 0; // remove unnecessary lines foreach ($tlds as $tld) { $tlds[ $i ] = trim($tld); // empty comments top level domains this is overboard if (!$tlds[ $i ] || $tld[0] == '/' || strpos($tld, '.') === false || substr_count($tld, '.') >= $max_tl) { unset($tlds[ $i ]); } $i++; } $tlds = array_values($tlds); file_put_contents($cache_filename, "<?php\n" . '$tlds = ' . str_replace(array(' ', "\n"), '', var_export($tlds, true)) . ";\n?" . ">"); // feel free to split the file into multiple and smaller files f.e. by first char of the domain-level-name to reduce memory usage } function getHost($dom='', $fast=false) { // general $dom = !$dom ? $_SERVER['SERVER_NAME'] : $dom; // for parse_url() ftp:// http:// https:// $dom = !isset($dom[5]) || ($dom[3] != ':' && $dom[4] != ':' && $dom[5] != ':') ? 'http://' . $dom : $dom; // remove "/path/file.html", "/:80", etc. $dom = parse_url($dom, PHP_URL_HOST); // replace absolute domain name by relative (http://www.dns-sd.org/TrailingDotsInDomainNames.html) $dom = trim($dom, '.'); // for fast check $dom = $fast ? str_replace(array('www.', 'ww.'), '', $dom) : $dom; // separate domain level $lvl = explode('.', $dom);// 0 => www, 1 => example, 2 => co, 3 => uk // fast check if ($fast) { if (!isset($lvl[2])) { return isset($lvl[1]) ? $dom : false; } } // set levels krsort($lvl);// 3 => uk, 2 => co, 1 => example, 0 => www $lvl = array_values($lvl);// 0 => uk, 1 => co, 2 => example, 3 => www $_1st = $lvl[0]; $_2nd = isset($lvl[1]) ? $lvl[1] . '.' . $_1st : false; $_3rd = isset($lvl[2]) ? $lvl[2] . '.' . $_2nd : false; $_4th = isset($lvl[3]) ? $lvl[3] . '.' . $_3rd : false; // tld check require('cache/tlds/all.txt'); // includes "$tlds"-Array or feel free to use this instead of the cache version: //$tlds = array('co.uk', 'co.jp'); $tlds = array_flip($tlds);// needed for isset() // fourth level is TLD if ($_4th && !isset($tlds[ '!' . $_4th ]) && (isset($tlds[ $_4th ]) || isset($tlds[ '*.' . $_3rd ]))) { $dom = isset($lvl[4]) ? $lvl[4] . '.' . $_4th : false; } // third level is TLD else if ($_3rd && !isset($tlds[ '!' . $_3rd ]) && (isset($tlds[ $_3rd ]) || isset($tlds[ '*.' . $_2nd ]))) { $dom = $_4th; } // second level is TLD else if (!isset($tlds[ '!' . $_2nd ]) && (isset($tlds[ $_2nd ]) || isset($tlds[ '*.' . $_1st ]))) { $dom = $_3rd; } // first level is TLD else { $dom = $_2nd; } return $dom ? $dom : false; } $urls = array( 'http://www.example.com',// example.com 'http://subdomain.example.com',// example.com 'http://www.example.uk.com',// example.uk.com 'http://www.example.co.uk',// example.co.uk 'http://www.example.com.ac',// example.com.ac 'http://example.com.ac',// example.com.ac 'http://www.example.accident-prevention.aero',// example.accident-prevention.aero 'http://www.example.sub.ar',// example.sub.ar 'http://www.congresodelalengua3.ar',// congresodelalengua3.ar 'http://congresodelalengua3.ar',// congresodelalengua3.ar 'http://www.example.pvt.k12.ma.us',// k12.ma.us (wrong) / if $max_tl=4: example.pvt.k12.ma.us 'http://www.example.lib.wy.us',// lib.wy.us (wrong) / if $max_tl=3: example.lib.wy.us 'com',// false '.com',// false 'http://big.uk.com',// big.uk.com 'uk.com',// false / in fast mode: uk.com (wrong) 'www.uk.com',// http://www.uk.com / in fast mode: uk.com (wrong) '.uk.com',// false / in fast mode: uk.com (wrong) 'stackoverflow.com',// stackoverflow.com ); if (!file_exists('cache/tlds/all.txt')) {// feel free to refresh by interval createTLD('cache/tlds/all.txt'); } echo '<pre>'; foreach ($urls as $url) { echo $url . ':' . var_export(getHost($url), true) . "\n"; } echo $_SERVER['SERVER_NAME'] . ':' . var_export(getHost(), true) . "\n"; echo '</pre>'; ?>
Falls noch nicht vorhanden, so wird die Liste von Mozilla heruntergeladen und in einen Cache gepackt. Die Funktion createTLD() wird also nur einmal aufgerufen.
Bei einem Check wird die Cache-Datei einfach includet und mit den bekannten Top Level Domains abgeglichen.
Wer will kann den Cache in einem Intervall löschen (so dass er z.B. 1x im Monat aktualisiert wird). Außerdem wäre denkbar den Cache in mehrere Dateien zu splitten, um den Arbeitsspeicher zu entlasten (der Cache umfasst ca. 4.000 Array-Elemente, was nicht wirklich viel ist, aber auch nicht wenig).
Die Genauigkeit kann man mit $max_tl beeinflussen. $max_tl = 2 erkennt z.B. http://www.example.co.uk/, während http://www.example.lib.wy.us/ nicht mehr erkannt wird. Letzteres dürfte allerdings so selten sein, dass ich es deswegen aus der Grundeinstellung rausgelassen habe.
Außerdem kann man entscheiden ob man überhaupt mit der Suffix List arbeiten will. Wenn nicht lässt man einfach die Funktion createTLD() komplett weg und ersetzt die Zeile "require('cache/tlds/all.txt');" mit der darauf folgenden und passt das Array seinen Bedürfnissen an.
Die Funktion erkennt Top Level Domains bis zur 4. Ebene wie z.B. bei http://www.example.pvt.k12.ma.us/. Top Level Domains der 5. Ebene gibt es laut Suffix List nicht, weshalb die Funktion hier auch keinen Check mehr versucht. Wer will kann natürlich die Funktion um eine weitere Ebene erweitern. Das ist denke ich durchschaubar.
Auch denkbar ist es die Rückgabe so zu ändern, dass nur der Domainname ohne die Endung ausgegeben wird. Oder ohne Endung mit allen Subdomains. Das kann jeder anpassen wie er möchte.
Wie man sieht gibt es vor der eigentlichen Prüfung der Top Level Domain noch einen optionalen $fast-Check. Der ist zwar nicht so genau was die Rückgabewerte bei falschen Domains anbelangt, aber dafür spart man sich das Einbinden der externen Datei und die dann noch folgenden Bedingungen. Wobei es gut sein kann, dass das im Falle von APC eh nicht hilft, da ich vermute, dass der alles in den Cache packt. Müsste man eigentlich mal benchmarken.
Gruß | HTML-Seite in Cache schreiben um MySQL-Abfragen zu sparen - Saturday, 25. February 2012 Das geht ganz einfach. Hier ein Beispiel:
Code:<?php // ab hier html kopf, menü, usw., eben alles was nicht in den cache soll, weil es sich z.b. ändert, wenn sich jemand einloggt ?> <html> <head> </head> <body> <div id="header"> Website </div> <?php // ab hier der content, der in den cache soll
// cache filename wird gebildet aus "script.php?foo=1&bar=2&PHPSESSID=098f6bcd4621d373cade4e832627b4f6", wobei die PHPSESSID entfernt wird, um mehrfache caches zu verhindern $cache_filename = 'cache/' . (preg_replace(array('#([\w\d]+=[a-f0-9]{32})#', '#[^a-z0-9-_]#', '#([_])+#'), array('', '_', '$1') , $_SERVER['REQUEST_URI'])) . '.txt'; // cache existiert und ist nicht zu alt, also cache nutzen // 86400 Sekunden = 1 Tag if (file_exists($cache_filename) && @filemtime($cache_filename) + 86400 > time()) { echo @file_get_contents($cache_folder . $cache_filename); } // cache fehlte oder war zu alt, also live auslesen und cache erstellen/überschreiben else { ob_start(); ?> <div> Content <?php // mysql abfragen sind auch mit im cache (werden dann nicht mehr ausgeführt, sondern das "echo"-Ergebnis landet nur im Cache ?> </div> <?php $html = ob_get_contents(); ob_end_clean(); @file_put_contents($cache_filename, $html); echo $html; } // ab hier der fuß usw. gleiches spiel wie beim kopf. // der fuß kann evtl. auch in den cache, weil sich da nichts ändert, aber ich empfehle es nicht, weil man evtl. selbst mal später was hinzufügen will ?> <div id="footer"> Copyright </div> </body> </html>
Alternativ kann man aber auch einzelne MySQL-Abfragen in einen Cache schreiben. Kommt ein wenig auf das Konzept der Programmierung und Seiteninhalte an.
Gruß | IP Firewall blockt nun Spam-Bots - Saturday, 21. January 2012 Auf der Startseite ist jetzt ein Link, der einen auf eine Seite führt, die laut robots.txt verboten ist. Wird der Link geöffnet, so löst das automatisch eine Sperre der IP aus. Damit sind nun auch böse Crawler abgedeckt, die sich nicht an die robots.txt halten.  | IP Firewall blockt nun Spam-Bots - Friday, 13. January 2012 P.S. die Login-Seite ist für Crawler verboten: http://www.maxrev.de/robots.txt
Entsprechend sind aktuell nur böse Bots betroffen. Allerdings werde ich noch für böse Crawler, die keine Formulare absenden, sondern nur Links folgen einen Link auf die Startseite packen, dessen Aufruf auch sofort zur Sperre führt  | IP Firewall blockt nun Spam-Bots - Thursday, 12. January 2012 Ich will dir da garnicht in die Technik reinreden, dazu kenn ich den Hintergrund des Projektes nicht genug. Aber da ich vermute das dies auf Linuxbasis läuft, wäre es nicht besser sowas an z.B. fail2ban zu übergeben? Dieses reagiert auf bestimmte Massenzugriffe (Regexp) in der access.log des Webservers und sperrt die entsprechende IP dann direkt für einen Port für Zeit X ,nachdem dies Anzahl Y aufgetreten ist, mittels iptables oder entsprechenden Paketfiltern. Somit würden weitere Anfragen garnicht erst vom Server bearbeitet, sondern Pakete werden direkt gedropt. Auch ergibt sich hierdurch nach der Konfiguration ein gewisser Automatismus und es entfällt ein größerer Pflegeaufwand.
Somit könnte man auch direkt Spider von bestimmten Diensten aussperren, auch wenn diese die robots.txt ignorieren. Durch die Nutzung von regular expressions ist eine größere Bandbreite an Möglichkeiten gegeben, auch für z.B. andere Dienste. | Daten einlesen - Thursday, 12. January 2012 Hallo!
Ich möchte Daten aus einer Textdatei einlesen. Dazu habe ich folgendes programmiert:
Code:#include <stdio.h> #include <stdlib.h>
int main(void) {
FILE * file; char line[10];
file = fopen("ex1.txt","r");
if (file){
while (!feof(file)){
fgets(line,10,file); printf("line: %s",line);
} //(!feof(file))
}// if (file)
fclose(file); return EXIT_SUCCESS; }
Das funktioniert soweit,aber ich habe einen seltsamen Effekt, den ich mir nicht erklären kann.
Wenn ich folgende Datei einlese: Code:10 20 30 40
bekomme ich als Ausgabe:
line: 10 line: 20 line: 30 line: 40 line: 40
also die letzte Zeile doppelt.
Warum ist das so? eigentlich sollte das Dateiende doch bei 40 erreicht sein? | IP Firewall blockt nun Spam-Bots - Friday, 6. January 2012 Hi,
ich habe eine kleine simple Firewall innerhalb von PHP realisiert. Bei jedem Aufruf prüft das Script ob die Datei "firewall/123.456.789.txt" existiert und wenn ja dann stoppt das Script noch bevor irgendwelche belastenden Dateien geladen werden (wie z.B. die Datenbankverbindung usw.). Auf der Stopp-Seite erscheint dann ein reCaptcha und wenn man das erfüllt, dann wird die IP wieder freigeschaltet (für den Fall, dass der Bot eine reguläre IP geklaut hat).
Hier das Script, falls jemand was ähnliches realisieren möchte: Code:// firewall if (file_exists('firewall/' . $client_ip . '.txt')) { include('includes/recaptchalib.php'); if (isset($_POST['submit'])) { $privatekey = 'Dein_Private_Key'; $resp = recaptcha_check_answer ($privatekey, $client_ip, $_POST['recaptcha_challenge_field'], $_POST['recaptcha_response_field']); if (!$resp->is_valid) { die('Wrong! (reCAPTCHA: ' . $resp->error . ')'); } else { unlink('firewall/' . $client_ip . '.txt'); header('HTTP/1.1 302 Found'); header('Location: http://' . $_SERVER['SERVER_NAME']); } } else { $publickey = 'Dein_Public_Key'; echo '<html><head><title>Firewall</title></head><body><div><form method="post" action="./">' . recaptcha_get_html($publickey) . '<input name="submit" type="submit"></form></div></body></html>'; } exit; }
Wann Ihr eine IP sperrt müsst Ihr selber entscheiden. Dazu kann man versteckte Formulare nutzen, Verlinkungen, Grafiken usw. Oder man sperrt die IP bei bestimmten User-Agents oder wenn gegen die robots.txt verstoßen wird usw.
Wer will kann sich das Script auch anpassen und stattdessen mit memcache arbeiten. Das spart dann sogar die Zugriffe auf die Platte. Von einer Variante mit MySQL solltet Ihr Abstand halten (kostet unnötig Performance).
Vorteile der Firewall: Der Vorteil ist, dass Spam-Bots nicht länger den Server mit unsinnigen Abfragen belasten. D.h. sie können die Seite nicht mehr Kopieren oder mit Spam befeuern.
Firewall-Statistik (live)
[include]firewall_stats.php[/include] | jaytech E-Book Neu OVP - Thursday, 24. November 2011 Moin hab hier noch nen E-Book .
Neu und OVP mit Rechnung!
Hier mal ein paa Daten:
Jay-tech E-Book EB-10 Artikelbeschreibung: Elektronisches Lesegerät Blendfreies 17,8 cm (7 Zoll) TFT Farb LCD Video-Wiedergabefunktion Foto-Wiedergabefunktion Musik-Spieler Kalender-Funktion 2 GB interner Speicher (erweiterbar per MicroSD Karte) Unterstützt Adobe DRM
Technische Daten:
Modell: E-Book EB-10 Bildschirm: 17,8 cm (7 Zoll) Farb TFT LCD Auflösung: 800 x 480 Pixel Interner Speicher: 2 GB NAND Flash (ca. 1,4 GB zur Verfügung) Externer Speicher: via MicroSD-Karte E-Bücher Formate: txt / html / pdf / fb2 / pdb / epub Unterstützt Adobe DRM (EPUB & PDF) Musik Formate: MP3 / WMA / FLAC / WAV / AAC Unterstützt ID3 Video Formate: MPEG4 / AVI / RMVB / FLV Foto Formate: JPG / BMP OSD-Sprache: Deutsch / Englisch / Französisch / Italienisch / Spanisch / Portugiesisch / Niederländisch / Japanisch / Koreanisch / Chinesisch Audio-Ausgang: 3,5 mm Audio-Anschluss Eingebauter Stereo-Lautsprecher Stromversorgung: Eingebauter Li-Polymer-Akku (2500 mAh) Lebensdauer der Batterie: ca. 9 ~ 10 Std. Abmessungen: 210 x 155 x 13,8 mm Gewicht: ca. 420g (mit Akku) Betriebstemperatur: 0 ~ 35 °C Lagertemperatur: -10 ~ 45 °C
Lieferumfang:
Bedienungsanleitung USB-Kabel Netzstecker
Preis mit Versand 125 € |
|  |