TIL: #bash provides pseudo devices for TCP and UDP connections:
echo "hello" > /dev/udp/127.0.0.1/1337
or
exec 5<>/dev/tcp/www.google.com/80
echo -e "GET / HTTP/1.0\n" >&5
cat <&5
I'm baffled how I've never discovered that until today.
TIL: #bash provides pseudo devices for TCP and UDP connections:
echo "hello" > /dev/udp/127.0.0.1/1337
or
exec 5<>/dev/tcp/www.google.com/80
echo -e "GET / HTTP/1.0\n" >&5
cat <&5
I'm baffled how I've never discovered that until today.
I don't think it is the kernel... unless those udev rules only apply to bash for some weird reason.
Just did a quick test trying that in zsh and it failed.
@fribbledom @nik starting bash, your second command works, but `ls /dev/tcp` or `/dev/udp` yields nothing, maybe that's why you didn't notice?
Seems like a rather irregular thing to do tbh.. But then i wouldn't know.
@fribbledom Special handling of certain file names is for redirections, and it is a Bash feature.
"Bash handles several filenames specially when they are used in redirections, as described in the following table. If the operating system on which Bash is running provides these special files, bash will use them; otherwise it will emulate them internally..."
https://www.gnu.org/software/bash/manual/html_node/Redirections.html
I like the way you're thinking! 😊
@fribbledom whoa that's bizarre, from the manpage description I wonder if they did it to mimic some previous OS functionality that they wished were available on all platforms
that exec syntax in the first line of the second example is strange! anyone know what it's called or how I could learn more about it?
also how would you close the network connection created in the second example?
wild stuff damn