Test if a port on a remote system is reachable (without telnet)
--
Music by Eric Matyas
https://www.soundimage.org
Track title: Puzzle Island
--
Chapters
00:00 Question
00:46 Accepted answer (Score 386)
01:18 Answer 2 (Score 517)
01:40 Answer 3 (Score 123)
02:08 Answer 4 (Score 79)
03:28 Thank you
--
Full question
https://superuser.com/questions/621870/t...
Accepted answer links:
[TCP]: http://en.wikipedia.org/wiki/Transmissio...
[UDP]: http://en.wikipedia.org/wiki/User_Datagr...
--
Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...
--
Tags
#linux #networking #port
#avk47
ANSWER 1
Score 586
Nice and verbose! From the man pages.
Single port:
nc -zv 127.0.0.1 80
Multiple ports:
nc -zv 127.0.0.1 22 80 8080
Range of ports:
nc -zv 127.0.0.1 20-30
ACCEPTED ANSWER
Score 444
Bash has been able to access TCP and UDP ports for a while. From the man page:
/dev/tcp/host/port
If host is a valid hostname or Internet address, and port is an integer port number
or service name, bash attempts to open a TCP connection to the corresponding socket.
/dev/udp/host/port
If host is a valid hostname or Internet address, and port is an integer port number
or service name, bash attempts to open a UDP connection to the corresponding socket.
So you could use something like this:
xenon-lornix:~> cat < /dev/tcp/127.0.0.1/22
SSH-2.0-OpenSSH_6.2p2 Debian-6
^C pressed here
Taa Daa!
ANSWER 3
Score 136
Netcat is a useful tool:
nc 127.0.0.1 123 &> /dev/null; echo $?
Will output 0 if port 123 is open, and 1 if it's closed.
ANSWER 4
Score 66
I found that curl may get the job done in a similar way to telnet, and curl will even tell you which protocol the listener expects.
Construct an HTTP URI from the hostname and port as the first argument to curl. If curl can connect, it will report a protocol mismatch and exit (if the listener isn't a web service). If curl cannot connect, it will time out.
For example, port 5672 on host 10.0.0.99 is either closed or blocked by a firewall:
$ curl http://10.0.0.99:5672
curl: (7) couldn't connect to host
However, from a different system, port 5672 on host 10.0.0.99 can be reached, and appears to be running an AMQP listener.
$ curl http://10.0.0.99:5672
curl: (56) Failure when receiving data from the peer
AMQP
It's important to distinguish between the different messages: the first failure was because curl could not connect to the port. The second failure is a success test, though curl expected an HTTP listener instead of an AMQP listener.