Txt Forum, Bilder & Videos
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 :D
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 €
Bilder
Videos
© 2004 - 2009 www.txt-forum.de | Communities | Impressum