V tomto dílu našeho seriálu se budeme opět zabývat utilitami pro komunikaci po síti, konkrétně se podíváme na netcat, ftp a wget.
1.8.2004 02:00 | Jan Houštěk | czytane 57040×
RELATED ARTICLES
KOMENTARZE
Netcat
Netcat je, jak název napovídá, síťová varianta nástroje cat
.
Samotný program se jmenuje nc
. V manuálové stránce se hned
v podtitulu dozvídáme, že se jedná o "TCP/IP swiss army knife". Je s podivem,
že tato poměrně mladá utilita nevznikla podstatně dříve a nezařadila se
ke standardním Unixovým nástrojům.
Netcat pracuje ve dvou základních režimech - server a klient. Klient
spustíme např. takto:
bfu@linux:~$ nc www.microsoft.cz 80
GET /linux.html HTTP/1.1
Host: www.microsoft.cz
HTTP/1.0 404 Not Found
Content-Length: 1635
Content-Type: text/html
Server: Microsoft-IIS/6.0
X-Powered-By: ASP.NET
Date: Thu, 22 Jul 2004 23:55:04 GMT
[...]
Netcat provedl spojení na port 80/tcp serveru www.microsoft.com
.
Nyní to, co napíšeme na standardní vstup (černá barva) je posláno bez
úprav vzniklým TCP spojením, a odpovědi (modrá barva) jsou vypsány na standardní
výstup.
Naše ukázka s HTTP klientem není příliš praktická, uživatel použije WWW browser
a pro diagnostiku HTTP se lépe hodí např. wget
, kterým se zabýváme
dále v článku. Jak je ale vidět, pro prvotní diagnostiku síťových služeb se jedná o
výborný nástroj (zejména ovládáme-li příslušný aplikační protokol <g>).
Server funguje velmi podobně, příkaz voláme s parametrem -l
(listen) a pomocí -p <port>
určíme TCP port, na kterém
se má naslouchat (pro porty nižší než 1024 je na unixových systémech třeba
zvláštních privilegií, např. v Linuxu musí proces získat CAP_NET_BIND_SERVICE,
což obvykle smí pouze root). Následující příklad ukazuje přenesení souborů
v obou směrech. Na straně serveru spustíme
nc -q 1 -l -p 1234 < server_to_client > client_to_server
a na klientovi poté
nc -q 1 server_name_or_IP 1234 > server_to_client < client_to_server
Parametr -q 1
zajistí uzavření spojení po obdržení EOF. Tento
primitivní způsob přenosu dat se hodí v případě, že není k dispozici žádná
jiná služba, je také vhodný k měření rychlosti linky (odpadá jakákoliv režie
protokolu).
Místo přenosu souborů lze nc
využít i pro přenos streamů. Pokud
na jednom stroji máme např. DVB kartu, můžeme si vysílání spustit na jiném
stroji; na stroji s kartou spustíme play_CT1 | nc -l -p 1234
a
na stanici nc server | mplayer -cache 4096 -
.
play_CT1
je skript, který na standardní výstup pouští vysílání
ČT1 (případně libovolný jiný obsah, který je třeba přenést). Keš v mplayeru
je použita pro plynulé přehrávání v případě fluktuací v přenosu.
FTP
Historie tohoto protokolu sahá až do roku 1973. Přesto, že jeho návrh je
pro dnešní potřeby již velmi nevhodný, stále se jedná vedle HTTP o
nejpoužívanější protokol pro přenos dat na internetu.
Na většině unixových systémů je k dispozici základní klient překvapivě
pojmenovaný ftp
. Ukažme si, jak práce s ním může vypadat
bfu@linux:~$ ftp mirror.linuxsoft.cz
Connected to mirror.linuxsoft.cz.
220 ProFTPD 1.2.9 Server (mirror.linuxsoft.cz) [212.71.169.49]
Name (mirror.linuxsoft.cz:bfu): anonymous
331 Anonymous login ok, send your complete email address as your
password.
Password: *****
230-------------------------------------------------------------------
230-Welcome to mirror.linuxsoft.cz!
230-
230-This public FTP server is served by LAM plus Ltd., see
230-http://www.vasesit.cz for more details. In case of any unusual
230-problems, please report them via e-mail to <mirror@linuxsoft.cz>.
230-------------------------------------------------------------------
230 Anonymous access granted, restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> passive
Passive mode on.
ftp> cd pool/104/9
250 CWD command successful.
ftp> ls
227 Entering Passive Mode (212,71,169,49,191,232).
150 Opening ASCII mode data connection for file list
-rw-r--r-- 1 linuxsoft linuxsoft 186901451 Jun 29 12:12
CorelPHOTOPAINT9Lnx.tar.gz
-rw-r--r-- 1 linuxsoft linuxsoft 61 Jun 29 12:13 MD5SUMS
226 Transfer complete.
ftp> get CorelPHOTOPAINT9Lnx.tar.gz
local: CorelPHOTOPAINT9Lnx.tar.gz remote: CorelPHOTOPAINT9Lnx.tar.gz
227 Entering Passive Mode (212,71,169,49,191,228).
150 Opening BINARY mode data connection for CorelPHOTOPAINT9Lnx.tar.gz
(186901451 bytes)
226 Transfer complete.
186901451 bytes received in 107.26 secs (1701.6 kB/s)
ftp> exit
221 Goodbye.
Popišme, co se vlastně při spojení děje. Nejprve se připojíme na
server a jsme dotázáni na login (nabízen je stejný login jako má naše
session na klientovi). Speciální login anonymous
se
používá pro neautentizovaný přístup, místo hesla se udává e-mailová
adresa (některé servery dokonce na různé úrovni kontrolují, zda je
zadaný řetězec skutečně platnou e-mailovou adresou), chceme-li zůstat
v anonymitě, použijeme např. user@example.com
.
Server nás může v průběhu spojení obšťastňovat různými informativními
hláškami (informace o serverovém software, obsah souboru welcome.msg
apod.), o které jsou uživatelé GUI klientů často ochuzeni. Příkaz
passive
zapíná pasivní režim. V řídící konexi (z klienta
na port 21/tcp FTP serveru) se přenáší jen příkazy a jejich
výsledky (tj. to, co vidíme v příkladu), samotná data se
přenáší separátní konexí, přičemž se rozlišuje, zda tuto konexi
otevírá server (aktivní režim, historicky starší) nebo klient (pasivní
režim). Celý návrh je z dnešního pohledu dost nevhodný (z hlediska
bezpečnosti, firewallů, NATu), chceme-li si ale vybrat menší zlo, měli
bychom používat právě pasivní režim. Některé klienty ho použijí
automaticky, u některých je třeba ho zapnout ručně.
Samotné příkazy ve ftp session asi nepotřebují zvláštní komentář. Kromě
předvedených cd
a get
je třeba zmínit ještě
put
a také jejich varianty podporující zástupné znaky * a ?
(mget
a mput
). Užitečný je také příkaz
pwd
, seznam všech příkazů podporovaných klientem získáme
příkazem help
.
Chcete-li se vyhnout nutnosti neustálého zadávání loginu a hesla, lze
tyto hodnoty předdefinovat v souboru .netrc
v domovském
adresáři. Příklad následuje, význam je zřejmý.
machine my.server.cz login me password mojeheslo
machine also.my.server.com login bfu password 4H,f$I/j#7v
default login anonymous password user@host.com
Nutno ještě zmínit, že existují i vylepšené verze řádkového FTP klienta,
např. velmi oblíbený ncftp
. Umí např. doplňovat názvy souborů
a adresářů tabulátorem, stáhnout či vylistovat celý adresářový strom apod.
Wget
Wget je nástroj určený ke získávání souborů přes HTTP a FTP. Narozdíl od
ftp
nevyžaduje interaktivní ovládání, vše potřebné je předáno
jako parametry na příkazové řádce, případně v konfiguračním souboru.
Základní použití je opravdu jednoduché, příkazem
wget <URL>
stáhneme příslušný soubor do aktuálního adresáře.
Pojďme se podívat na nejzajímavější volby.
--passive-ftp
nebo passive_ftp = on
v
wgetrc
zapne pasivní režim pro FTP
-O <filename>
udává, jak se má jmenovat stažený soubor
(-O -
pro standardní výstup)
-S
na standardní chybový výstup vypíše HTTP hlavičky
nebo odpovědi FTP serveru
-b
stahuje na pozadí
-q
a -nv
omezí výstupy programu (první zcela,
druhá částečně), vhodné pro stahování na pozadí nebo neinteraktivní
spouštění
-p
stáhne HTML stránku i s veškerým viditelným obsahem
(tj. obrázky, zvuky, styly, nikoliv odkazy)
-r
zapne rekurzivní režim, tj. stáhne dané URL a pokračuje
nalezenými odkazy, funguje i s FTP, je-li jako URL zadán adresář, stáhne ho
s celým jeho obsahem včetně podadresářů
Ukažme si nyní několik použití. Příklad s www.microsoft.com
bychom s využitím wget
udělali např. takto:
bfu@linux:~$ wget -S -O /dev/null http://www.microsoft.com/linux.html
--10:36:59-- http://www.microsoft.com/linux.html
=> `/dev/null'
Resolving www.microsoft.com... done.
Connecting to www.microsoft.com[207.46.156.220]:80... connected.
HTTP request sent, awaiting response...
1 HTTP/1.1 404
2 Connection: keep-alive
3 Date: Wed, 28 Jul 2004 08:36:59 GMT
4 Server: Microsoft-IIS/6.0
5 P3P: CP="ALL IND DSP COR ADM CONo CUR CUSo IVAo IVDo PSA PSD TAI
TELo OUR SAMo CNT COM INT NAV ONL PHY PRE PUR UNI"
6 X-Powered-By: ASP.NET
7 Pragma: no-cache
8 cache-control: no-store
9 Content-Length: 16134
10 Content-Type: text/html
11 Expires: Wed, 28 Jul 2004 08:36:59 GMT
12 Cache-control: private
10:37:00 ERROR 404: (no description).
Úvodní stránku www.linuxsoft.cz
včetně obrázků a stylů snadno
stáhneme příkazem
wget -k -p www.linuxsoft.cz
V aktuálním adresáři vznikne adresář www.linuxsoft.cz
a v něm
soubor index.html
a dále všechen potřebný obsah pro správné
zobrazení stránky. Parametr -k
slouží k přepsání linků ve
staženém HTML dokumentu na lokálně stažený obsah. Toto je nutné např. v případě,
že na stránce byla použita absolutní URL. Všimněte si, že při neuvedení
protokolu v URL se předpokládá http, a není-li z URL zřejmý název
souboru, použije se index.html
(i když v tomto konkrétním případě
se ve skutečnosti jedná o soubor index.php
).
Nechat na pozadí stahovat linuxový kernel z FTP lze např. lze takto.
bfu@linux:~$ wget -b -c --limit-rate=50k ftp://sunsite.mff.cuni.cz/
MIRRORS/ftp.kernel.org/pub/linux/kernel/v2.0/linux-2.0.40.tar.bz2
Continuing in background, pid 24486.
Output will be written to `wget-log'
Parametr -b
zapíná stahování na pozadí, průběh lze sledovat
v souboru wget-log
a ukončit lze posláním TERM signálu danému
procesu (kill <pid>
). Navázání nedokončeného downloadu
umožňuje parametr -c
. Poslední použitý parametr netřeba
vysvětlovat, je ale k dispozici jen v novějších verzích wgetu (např.
wget 1.8.1
z Debian Woodyho jej nepodporuje).
V posledním příkladu si ukážeme využití rekurze. Mirror stránek DJB provedeme
snadno příkazem
wget -r -l inf -k cr.yp.to
# nebo
wget -m -k cr.yp.to
Volba -m
nebo též --mirror
nastaví parametry vhodné
k mirrorování. Co přesně bude nastaveno lze zjistit v manuálové stránce.
Nejdůležitější volby jsou -r
, která zapíná rekurzi a
-l
, která určuje maximální hloubku stahování. Je možné použít
při rekurzi a omezení hloubky nám již známou volbu -p
. Není-li
to explicitně požadováno volbou -H
, nestahují se soubory z
jiných domén (odkazy mimo cr.yp.to
zůstanou nestaženy a
nezměněny). Další možnosti najdete v dokumentaci.
Wget je ovšem nutno považovat jen za opravdu základní nástroj pro rekurzivní
stahování. Většími možnostmi oplývá např. pavuk
nebo
httrack
.
Zdroje