Sending file via netcat
I'm using something like this to send file from one computer to another:
To serve file (on computer A):
cat something.zip | nc -l -p 1234To receive file (on computer B):
netcat server.ip.here. 1234 > something.zipMy question is... can I do the opposite? Let's say I have file on computer B and I want to send it to A but not the way I wrote above, but by making computer that's supposed to receive file (A) be 'listening' server and connect computer that's 'sending' file (B) to server and send the file? Is it possible? I think it might be but I'm not sure how to do this.
In case my above explanation is messed up: How do I send file TO 'server' instead of serving the file on server and then taking it FROM it (like I did above)?
16 Answers
On your server (A):
nc -l -p 1234 -q 1 > something.zip < /dev/nullOn your "sender client" (B):
cat something.zip | netcat server.ip.here 12349
As a note, if you want to also preserve file permissions, ownership and timestamps, we use tar with netcat to do transfers of directories and files.
On receiving system:
nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/treeFrom sending system:
tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345 Hope that helps.
2Computer A: nc -l -p 1234 > filename.txt
Computer B: nc server.com 1234 < filename.txt
Should work too ;)
Init the target listening to the port. AKA receiver end
nc -vl 44444 > pick_desired_name_for_received_file
Send the file to the target. AKA sender end
nc -n TargetIP 44444 < /path/to/file/you/want/to/send
read more
I cooked everything for you. Keep it handy for regular use case.
Make sure you change IP and port in this script.
There are 3 modes.
1. direct file transfer
2. compressed file transfer
3. folder transfer
receivefile() { [ $# -lt 1 ] && echo '$0 <file> <port>' && return 1 local file=$1 local port=${18080:-2} md5sum $file nc -v -l 0.0.0.0 -p $port > $file
}
sendfile() { [ $# -lt 1 ] && echo '$0 <file> <server> <port>' && return 1 local file=$1 local server=${115.98.2.1:-2} local port=${18080:-3} md5sum $file nc -c $server $port < $file
}
receivefilecompressed() { [ $# -lt 1 ] && echo '$0 <file> <port>' && return 1 local file=$1 local port=${18080:-2} md5sum $file nc -v -l 0.0.0.0 -p $port | gunzip > $file
}
sendfilecompressed() { [ $# -lt 1 ] && echo '$0 <file> <server> <port>' && return 1 local file=$1 local server=${115.98.2.1:-2} local port=${18080:-3} md5sum $file gzip -c $file | nc -c $server $port
}
receivefolder() { local port=${18080:-1} nc -v -l 0.0.0.0 -p $port | tar zxv
}
sendfolder() { [ $# -lt 1 ] && echo '$0 <folder> <server> <port>' && return 1 local folder=$1 local server=${115.98.2.1:-2} local port=${18080:-3} tar czp $folder | nc -c $server $port
} Start another instance of netcat on computer B. Just do what you did on computer A, but serve it from B. Give the new server a new port.
4