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.