Is there a way to quickly bind to a TCP port/ip address and simply print out all information to STDOUT? I have a simple debugging solution which writes things to 127.0.0.1:4444 and I'd like to be able to simply bind up a port from bash and print everything that comes across. Is there an easy way to do this?
4 Answers
$ nc -k -l 4444 > filename.out
see nc(1)
4 Comments
nc dies if I don't run it like this: while true; do nc -l 4444; done.ncat instead of nc (it comes bundled with nmap and it's a modern day incarnation of nc)Just because you asked how to do it in bash, though netcat answer is very valid:
$ exec 3<>/dev/tcp/127.0.0.1/4444
$ cat <&3
4 Comments
/dev/tcp as explained in unix.stackexchange.com/a/49947/13746That is working as you expecting:
nc -k -l 4444 |bash
and then you
echo "ls" >/dev/tcp/127.0.0.1/4444
then you see the listing performed by bash.
[A Brief Security Warning]
Of course if you leave a thing like this running on your computer, you have a wide open gateway for all kinds of attacks because commands can be sent from any user account on any host in your network. This implements no security (authentication, identification) whatsoever and sends all transmitted commands unencrypted over the network, so it can very easily be abused.
3 Comments
/dev/tcp, you can run: echo "ls" | nc 127.0.0.1 4444ls will not show this--enable-net-redirections.Adding an answer using ncat that @Freedom_Ben alluded to:
ncat -k -l 127.0.0.1 4444
and explanation of options from man ncat:
-k, --keep-open Accept multiple connections in listen mode
-l, --listen Bind and listen for incoming connections
1 Comment
ncat comes with nmap and supports concurrent connections, while the legacy nc command does not.