Bash Port Scanner
I haven’t done a very good job keeping up with features that have been added to Bash over the years. While sitting in on Hal Pomeranz’s Return of Command-Line Kung Fu talk at Open Source Bridge this year I picked up this gem:
$ for ((i=0; $i<1024; i++)); do
> echo > /dev/tcp/localhost/$i && echo "tcp/$i is alive"
> done 2>/dev/null
tcp/22 is alive
tcp/80 is alive
…
I didn’t know Bash supported C-style for loops, so I’m glad to have
learned of them. But I’m not quite sure how to feel about the magic
/dev/tcp
“files” – that seems potentially useful but so
very perverse. Search for “/dev/tcp” in the Bash man page to read more
about it (/dev/udp
is also supported).