NetCat, a przesyłanie plików

NetCat (nc) jest narzędziem pozwalającym m.in transmitować dowolne dane (nie tylko tekstowe) korzystając z protokołów TCP i UDP, skanować porty zdalnych maszyn, tworzyć proste serwery usług i robić wiele innych fajnych rzeczy. Z racji swojej niewielkiej objętości często jest określany scyzorykiem szwajcarskim … ale nie o tym miałem pisać, każdy kogo zainteresowały dodatkowe opcje nc niech spojrzy do manuala i do licznych przykładów wykorzystania tego programu dostępnych przez Google.

Ja w tej krótkiej notce chciałbym pokazać, że istnieje alternatywny (dla FTP i SCP) sposób transferu dużych plików przez sieć lokalną (nie polecam przesyłać w taki sposób danych przez internet ponieważ nie ma wznawiania transmisji i dane nie są w żaden sposób szyfrowane przez program nc).

A więc po kolei, dla NetCata nie ma znaczenia skąd przychodzą dane i gdzie są wysyłane dopóki jest to możliwe. Program może działać zarówno jako klient jak i serwer. Pora przejść do praktyki:

Serwer do którego przesyłamy ma ip zewnętrzne

Sytuacja taka ma miejsce gdy maszyna na której uruchomiliśmy NetCata jako serwer (punkt docelowy dla danych, które przesyłamy) jest widoczna przez klienta (drugi komputer)

serwer: (punkt docelowy dla danych):

nc -l -p 6666 | tar xvfp -

Informacja

Jeśli nie masz praw administratora systemu to jest wątpliwe by udało Ci się uruchomić nasłuchiwanie na porcie niższym niż 1024.

Informacja

Notka: W tym przypadku serwerem jest maszyna odbierająca dane.

klient (źródło danych):

tar cfp - /katalog/do/przeslania | nc -w 3 ip_serwera_nc 6666

i właściwie nasze dane sa już przesyłane.

Informacja

Operacja nie zawsze się powiedzie ponieważ jeśli na komputerze będącym serwerem mamy zablokowane porty (np przez iptables) to zadne dane do naszego serwera nie dotrą, ponieważ zostaną odrzucone przez firewall.

Klient ma zewnętrzne ip

Sytuacja taka ma miejsce, gdy punkt docelowy dla danych jest np za firewallem i nijak nie możemy się z nim skomunikować bezpośrednio, ale sami mamy ip widoczne (np zewnętrzne) z punktu docelowego

serwer (źródło danych)

tar cvfp - . | nc -w 3 -l -p 6666

klient (punkt docelowy dla danych):

nc adres_ip_serwera 6666 | tar xvfp -

Oba komputery znajdują się za NATem

Posiadamy dostęp do trzeciego komputera z ip zewnętrznym

Wydaje się, że jest to sytuacja patowa, ale gdy mamy dostęp do zewnętrznego komputera z Linuxem i ten komputer stoi na w miarę dobrym łączu, możemy obejść tą niedogodność niewielkim kosztem (generując dosyć znaczny ruch z maszyny z ip zewnętrznym)

Konfiguracja maszyny z ip zewnętrznym (nazwijmy ją przesiadkową)

nc -w 3 -l -p 6666 | nc -w 3 -l -p 6667 6668

Informacja

Uruchamiamy tutaj podwójny serwer nc, który transmituje nam ruch pomiędzy maszynami, ale to nie wszystko zabawa się zaczyna gdy pomiędzy dwa serwery nc damy polecenie tee dodatkowo duplikujące dane przychodzące z pipe do pliku zewnętrznego (jednym słowem za jednym przesłaniem danych mamy je na dwóch maszynach - przesiadkowej i docelowej). Ale to chyba nie jest tak naprawdę interesujące.

klient (źródło danych):

tar cfp - dane_do_poslania | nc -w 3 ip_serwera 6666

klient (punkt docelowy dla danych):

nc ip_serwera 6667 6668 | tar xvfp -

Informacja

Ten sposób działa ale dosyć dużym kosztem (podwaja ruch na maszynie przesiadkowej - dobrze by było gdyby miała łącze full duplex), ale można to zrobić lepiej poprzez tzw NAT Traversal … ale o tym może innym razem.

Comments

comments powered by Disqus