19

I'm writing a Graphite/Diamond collector measuring network latency. Specifically it should measure the time it takes to open up a connection to a port on a remote server. And it needs to work via script, i.e. no humans on the keyboard running this interactively.

To give an example with a fictional parameter to telnet which would do exactly what I need.

time telnet --close-connection-immediately-after-established somehost.somedomain.com 1234

Trying somehost.somedomain.com...
Connected to somehost.somedomain.com.
Escape character is '^]'.
Connection closed automatically after established.

real    0m3.978s
user    0m0.001s
sys 0m0.003s

Basically, what's a command-line way to output 3.978 given the example above using only builtin tools?

You could wrap the telnet in an expect script I suppose and have it issue:

^]
close

... but that seems rather ugly. Any ideas?

r3cgm
  • 337

3 Answers3

32

What about :

time nc -zw30 <host> <port>
0

Just use ping or configure a client-server setup and use one of the established unix network benchmarking tools:
https://www.binarytides.com/linux-commands-monitor-network/
https://access.redhat.com/solutions/2122681

--

While time+nc is useful in getting ballpark estimation on latency, it should not be used as a fact in production connections evaluation.

For example, instantiation and running of extra processes (like time) costs, well, time. For example, I got 15-20ms results with time+nc, while with traditional ping/ICMP echo, results were on the side of 3-5ms. For quick test, ping seemed to do the job, for more elaborate results, one usually needs a client-server setup.

straville
  • 109
0

Use something like:

$: echo 'exit' | time telnet <HOST> <PORT>
bjoster
  • 5,241
Serg
  • 1