schweikert / fping

High performance ping tool
https://fping.org
Other
1.01k stars 249 forks source link

--alive and --count options mutual exclusive #271

Closed psuet closed 4 months ago

psuet commented 1 year ago

When using the --alive option in conjunction with the --count option, the --alive option is simply disregarded without any error or warning.

This behaviour is unintuitive, and the mutual exclusivity is not documented as far as I can see.

auerswal commented 7 months ago

Do you expect only the lines for targets for which no response at all was received to be omitted? E.g., as follows?

$ ./src/fping -u -c1 8.8.8.7 8.8.8.8 2>&1 | grep -v '/0/100%'
8.8.8.8 : xmt/rcv/%loss = 1/1/0%, min/avg/max = 80.5/80.5/80.5
psuet commented 7 months ago

Yes, similar, but --alive only outputs the IP instead of all this information.

$ ./src/fping -u -c1 8.8.8.7 8.8.8.8 2>&1 | grep -v '/0/100%' | cut -d: -f1 | xargs
8.8.8.8

My (former) usecase: I have a large Layer 2 Network (i know, i know) with some specialized hardware that sometimes swallows / rate-limits requests on first try. Thus I have to repeat requests to really get an accurate list of all alive devices.

auerswal commented 7 months ago

Ah, I made a mistake in my example, it should not have had the -u. I was thinking about:

$ fping -c3 8.8.8.7 8.8.8.8 2>&1 | grep -v -e '/0/100%' -e 'timed out'
8.8.8.8 : [0], 64 bytes, 65.3 ms (65.3 avg, 0% loss)
8.8.8.8 : [1], 64 bytes, 61.3 ms (63.3 avg, 0% loss)
8.8.8.8 : [2], 64 bytes, 64.2 ms (63.6 avg, 0% loss)

8.8.8.8 : xmt/rcv/%loss = 3/3/0%, min/avg/max = 61.3/63.6/65.3

I would expect that the --retry=N option together with --backoff 1 should help with your use case:

$ fping --retry 10 --backoff 1 --alive 8.8.8.7 8.8.8.8 
8.8.8.8

With --backoff 1, the pause between attempts is constant, as with --count N, but fping stops sending echo requests once it has received an answer.