Netcat is a helpful tool when you are in a hurry to transfer files between machines. Learning this tool is a must have skill for any devops, it or software developer. Usually people transfer files using SCP, FTP, SMB but sometimes you don't want to waste time configuring a service.
IMPORTANT netcat uses plain transfer. if you want to send confidential information you should encrypt your data before sending it to the network.
You will have one netcat that will send data and the other one for receiving.
nc -l -p 9999 > received_file.txt
Netcat will start to listen on the port 9999 and the result will be save to the received_file.txt. If you don't redirect stdout the data received will be printed on screen.
nc 192.168.0.1 9999 < received_file.txt
When you are sending you need to specify the address (192.168.0.1) and the port (9999). We redirected the content of the file to netcat, note the order of the "<" is the inverse of the receiving side. You can use -w paramter of the nc command to specify a timeout.
You can use linux pipes to compress and decompress
The receiving side will first xz, the -c flag is writting to the stdout and -d for decompress. Since uncompress writes to the stdout, then tar will finally unpack the uncompressed data.
nc -l -p 9999 | xz -dc | tar xvf -
On the sending side we first use tar to pack the directory and then we pipe to xz, when data is compressed we redirect compressed stdout to nc command.
tar cvf - . | xz -c | nc 192.168.0.1 9999
Use netcat to transfer the whole disk
On the sending side we use dd and compress with xz:
dd if=/dev/hda3 | xz -c | nc -l 9595
nc 192.168.0.1 9595 | pv -b > hardrive_backup.img.xz
The pv command allows a user to see the progress of data through a pipeline. We save the hard drive image to a file.