[prev in list] [next in list] [prev in thread] [next in thread] 

List:       nmap-dev
Subject:    Re: Off by one in ICMP distance calculation?
From:       "Luis MartinGarcia." <luis.mgarc () gmail ! com>
Date:       2011-09-30 10:00:05
Message-ID: 4E859325.7020207 () gmail ! com
[Download RAW message or body]

On 09/15/2011 06:48 PM, David Fifield wrote:
> During OS detection, we calculate distance by subtracting the
> encapsulated TTL in an ICMP error reply from the TTL we set originally
> when sending the probe:
> /* Count hop count */
> if (hss->distance == -1) {
> hss->distance = this->udpttl - ip2->ip_ttl;
> }
> I think this is off by one: it reports one less than the actual
> distance. I added this debugging line:
> log_write(LOG_PLAIN, "TTL distance: %d - %d == %d\n", this->udpttl, ip2->ip_ttl, \
> this->udpttl - ip2->ip_ttl); and I tried running with traceroute. Here's a remote \
> host: TTL distance: 56 - 46 == 10
> Network Distance: 11 hops
> TRACEROUTE (using port 53/tcp)
> HOP RTT      ADDRESS
> 1   6.11 ms  192.168.0.1
> ...
> 9   29.23 ms 10gigabitethernet1-1.core1.fmt1.he.net (72.52.92.109)
> 10  14.23 ms linode-llc.10gigabitethernet2-3.core1.fmt1.he.net (64.62.250.6)
> 11  17.00 ms li86-221.members.linode.com (74.207.244.221)
> and here's a directly connected host:
> TTL distance: 61 - 61 == 0
> Network Distance: 1 hop
> TRACEROUTE
> HOP RTT     ADDRESS
> 1   0.23 ms 192.168.0.3
> 
> Directly connected hosts are already treated as a special case and set
> to distance 1, so you would only notice the discrepancy against
> multiple-hop hosts.
> 
> Does anyone else agree that this is off by one?
> 

Hi!

In my opinion it  depends on the definition of network distance. If we
only mean the number of intermediate devices between the sender and the
receiver, then the SENT_TTL - RECV_TTL throws the correct value.
However, I don't think the distance should be defined like that. In
real-world when someone asks how far is some tube station and I tell
them it's three stops away, that means you get the tube in station A,
you pass B and C until you get to D. In network communications B and C
would be routers and the TTL would be decremented only twice, not three
times. Therefore:

A[TTL 255] --> B [TTL 254] --> C [TTL 253] --> D   ::
Distance=255-253=2?  Wrong, It should be 3.

So yeah, I agree that its and off by one bug. Plus, if we do
{distance=SENT_TTL - RCVD_TTL + 1} then the directly connected is not a
special case and can be reliably distinguished from the scenario where
there is one router in the middle.

Just my two cents. Regards,

Luis.



_______________________________________________
Sent through the nmap-dev mailing list
http://cgi.insecure.org/mailman/listinfo/nmap-dev
Archived at http://seclists.org/nmap-dev/


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic