Proxy s filtrací obsahu - dokumentace

Autor

Milan Cingroš
A01112
nemo@student.zcu.cz

Zadání

Proxy s filtrací obsahu - filtrace obsahu typicky www stránek, program bude přicházející datový tok filtrovat podle zadaných pravidel, pravidly budou adresa, klíčová slova, apod., využijte knihovny pro parsování textu podle regulárních výrazů (regexp), případně využijte i předchozí práce

Popis řešení

Proxy server se na jednu stranu chová jako server a na druhou jako klient. Jako server se chová pro prohlížeč. Čeká až se prohlížeč (klient) připojí, přijme požadavek, změní svojí roli a jako klient požádá webserver o stránky. Webserver odpoví, proxy server jako klient přijme odpověd, opět změní svojí roli a jako server pošle odpověd prohlížeči. U proxy serveru s filtrací to je ještě o trochu složitější. Když obdrží požadavek, zkontroluje přes regulární výrazy jestli adresa není zakázaná. Pokud je zakázaná, odešle prohlížeči stránku s chybovým hlášením, jinak pošle žádost na webserver. Když dorazí odpověd, načte hlavičky a zkontroluje mime typ. Pokud se jedná např. o obrázek, okamžitě ho začne přeposílat prohlížeči. Když je mime typ odpovědi stejný jako mime typy dané konstantou ve třídě Proxy dál načítá stránku a průběžně kontroluje, jestli se v ní nevyskytují zakázané řetězce. Pokud se objeví, okamžitě ukončí stahování a vrátí prohlížeči informaci, že stránka je zakázaná. Vždy se snaží vrátit data hned jak to je možné. Aby mohl obsloužit více požadavků najednou, hned jak přijme spojení od prohlížeče vytvoří pro něj samostané vlákno a to se dále již zcela nezávisle stará o obsloužení tohoto klienta.

Hned po spuštění proxy server vytvoří dvě instance třídy ObsahUrlFiltr. Jednu pro filtraci podle url a druhou pro filtraci podle obsahu, každá si načte svůj soubor s regulárními výrazy a hned si je připraví do LinkedListu pro další práci. Samotné filtrování v této třídě zajištuje metoda cenzura, která postupně porovnává daný string s regulárními výrazy a pokud narazí na nějaký vyhovující, zakazuje přeposlání stránky do prohlížeče resp. odeslání požadavku na server. Program by měl bez problému obsloužit požadavky HTTP verze 1.0 a z verze 1.1 požadavky GET, POST a HEAD které jsou ve verzi 1.0. Podrobnější popis jednotlivých tříd a metod je ve zdrojových kódech a v dokumentaci vygenerované JavaDoc.

Technologie potřebné pro provoz proxy serveru

Server by měl běžet na všech operačních systémech pro které je dostupná Java. Proxy server funguje na protokolu TCP/IP. To by mělo být vše co potřebuje k životu. Veškerá potřebná nastavení (port na kterém server naslouchá, názvy souborů s regulárními výrazy, atd.) jsou jako konstanty ve třídě Proxy. Program se přeloží příkazem javac *.java v adresáři se zdrojovými kódy, a spustí příkazem java cz.cingros.proxy.Proxy v adresáři v kterém je nahrán adresář cz, nebo java -jar proxy.jar v adresáři kde je tento soubor. Hned po spuštění proběhne načtení konfiguračních souborů s regulárními výrazy a kontrola regulárních výrazů. Pokud soubory nejsou nalezeny, proxy server funguje, ale nefiltruje. Chybně napsané regulární výrazy se na filtraci nepodílejí.

Technologie použité při vývoji

Vývoj probíhal na Gentoo Linuxu (jádro 2.6.9) v prostředí NetBeans 3.6 s Blackdown jdk 1.4.2.01. Na prohlížení provozu na síti jsem použil Ethereal 0.10.8 a tato dokumentace je psaná v editoru Quanta+ 3.3.2. Funkčnost proxy serveru byla testována v prohlížeči Mozilla 1.7.3.

Použité zdroje

HTTP - Hypertext Transfer Protocol Overview
Overview (Java 2 Platform SE v1.4.2)