Nmap Development mailing list archives
Match ICMP echo reply to request in scan_engine.cc
From: Chris Johnson <cjohnson () zenoss com>
Date: Tue, 23 Jul 2013 09:31:45 -0400 (EDT)
Zenoss, Inc. offers the Nmap Project (Insecure.Com LLC) the unlimited, non-exclusive right to reuse, modify, and
relicense the code contained in this email.
Steps to reproduce and fix bug:
0. Create some artificial latency
$ sudo tc qdisc add dev eth0 root netem delay 500ms
1. Make sure you did that correctly with a sanity check
$ ping www.google.com
PING www.google.com (74.125.227.48) 56(84) bytes of data.
64 bytes from 74.125.227.48: icmp_seq=1 ttl=63 time=506 ms
64 bytes from 74.125.227.48: icmp_seq=2 ttl=63 time=509 ms
64 bytes from 74.125.227.48: icmp_seq=3 ttl=63 time=510 ms
64 bytes from 74.125.227.48: icmp_seq=4 ttl=63 time=510 ms
64 bytes from 74.125.227.48: icmp_seq=5 ttl=63 time=519 ms
64 bytes from 74.125.227.48: icmp_seq=6 ttl=63 time=527 ms
^C
--- www.google.com ping statistics ---
6 packets transmitted, 6 received, 0% packet loss, time 6216ms
rtt min/avg/max/mdev = 506.614/513.973/527.012/7.139 ms
2. Try that with nmap.
$ sudo nmap 74.125.227.48 -sn -PE -n --privileged --send-ip --min-rtt-timeout 1000ms --max-rtt-timeout 1000ms
--max-retries 1
Starting Nmap 6.26SVN ( http://nmap.org ) at 2013-07-22 18:20 UTC
Nmap scan report for 74.125.227.48
Host is up (0.51s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds
3. That looks fine, now try it with a shorter rtt-timeout, and max-retries 0 ...
$ sudo nmap 74.125.227.48 -sn -PE -n --privileged --send-ip --min-rtt-timeout 400ms --max-rtt-timeout 400ms
--max-retries 0
Starting Nmap 6.26SVN ( http://nmap.org ) at 2013-07-22 18:21 UTC
Warning: 74.125.227.48 giving up on port because retransmission cap hit (0).
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.46 seconds
4. That makes sense. But if we try with a shorter rtt-timeout and max retries > 0 ...
$ sudo nmap 74.125.227.48 -sn -PE -n --privileged --send-ip --min-rtt-timeout 400ms --max-rtt-timeout 400ms
--max-retries 1
Starting Nmap 6.26SVN ( http://nmap.org ) at 2013-07-22 18:21 UTC
Nmap scan report for 74.125.227.48
Host is up (0.11s latency).
Nmap done: 1 IP address (1 host up) scanned in 0.57 seconds
5. Wait, what? 0.11s latency? Let's try that again with a little more debug logging ...
$ sudo nmap 74.125.227.48 -sn -PE -n --privileged --send-ip --min-rtt-timeout 400ms --max-rtt-timeout 400ms
--max-retries 1 -ddd
Starting Nmap 6.26SVN ( http://nmap.org ) at 2013-07-22 18:21 UTC
Fetchfile found /usr/local/bin/../share/nmap/nmap.xsl
The max # of sockets we are using is: 0
--------------- Timing report ---------------
hostgroups: min 1, max 100000
rtt-timeouts: init 400, min 400, max 400
max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
parallelism: min 0, max 0
max-retries: 1, host-timeout: 0
min-rate: 0, max-rate: 0
---------------------------------------------
Fetchfile found /usr/local/bin/../share/nmap/nmap-payloads
Initiating Ping Scan at 18:21
Scanning 74.125.227.48 [1 port]
Packet capture filter (device eth0): dst host 10.0.2.15 and (icmp or icmp6 or ((tcp or udp or sctp) and (src host
74.125.227.48)))
SENT (0.0244s) ICMP [10.0.2.15 > 74.125.227.48 Echo request (type=8/code=0) id=61757 seq=0] IP [ver=4 ihl=5
tos=0x00 iplen=28 id=47178 foff=0 ttl=51 proto=1 csum=0x95da]
**TIMING STATS** (0.0244s): IP, probes active/freshportsleft/retry_stack/outstanding/retranwait/onbench,
cwnd/ssthresh/delay, timeout/srtt/rttvar/
Groupstats (1/1 incomplete): 1/*/*/*/*/* 10.00/75/* 400000/-1/-1
Current sending rates: 44.51 packets / s, 1246.33 bytes / s.
Overall sending rates: 44.51 packets / s, 1246.33 bytes / s.
SENT (0.4301s) ICMP [10.0.2.15 > 74.125.227.48 Echo request (type=8/code=0) id=44373 seq=0] IP [ver=4 ihl=5
tos=0x00 iplen=28 id=21126 foff=0 ttl=45 proto=1 csum=0x019f]
**TIMING STATS** (0.4302s): IP, probes active/freshportsleft/retry_stack/outstanding/retranwait/onbench,
cwnd/ssthresh/delay, timeout/srtt/rttvar/
Groupstats (1/1 incomplete): 1/*/*/*/*/* 10.00/75/* 400000/-1/-1
Current sending rates: 4.67 packets / s, 130.76 bytes / s.
Overall sending rates: 4.67 packets / s, 130.76 bytes / s.
RCVD (0.5391s) ICMP [74.125.227.48 > 10.0.2.15 Echo reply (type=0/code=0) id=61757 seq=0] IP [ver=4 ihl=5 tos=0x00
iplen=28 id=13833 foff=0 ttl=50 proto=1 csum=0x191c]
Found 74.125.227.48 in incomplete hosts list.
We got a ping packet back from 74.125.227.48: id = 15857 seq = 0 checksum = 49678
ultrascan_host_probe_update called for machine 74.125.227.48 state UNKNOWN -> HOST_UP (trynum 1 time: 109170)
Ultrascan DROPPED probe packet to 74.125.227.48 detected
Changing ping technique for 74.125.227.48 to icmp type 8 code 0
Moving 74.125.227.48 to completed hosts list with 0 outstanding probes.
Changing global ping host to 74.125.227.48.
Completed Ping Scan at 18:21, 0.54s elapsed (1 total hosts)
Overall sending rates: 3.72 packets / s, 104.22 bytes / s.
pcap stats: 1 packets received by filter, 0 dropped by kernel.
Nmap scan report for 74.125.227.48
Host is up, received echo-reply (0.11s latency).
Final times for host: srtt: 109047 rttvar: 109047 to: 400000
Read from /usr/local/bin/../share/nmap: nmap-payloads.
Nmap done: 1 IP address (1 host up) scanned in 0.56 seconds
Raw packets sent: 2 (56B) | Rcvd: 1 (28B)
6. Looks like we matched up the response from the first (timed-out) request against the second request. Bogus! Let's
fix that.
$ sudo tc qdisc del dev eth0 root
$ svn co https://svn.nmap.org/nmap && cd nmap
$ wget 'http://git.io/cjohnson.nmap.diff' -q -O - | patch -p0
$ ./configure && make && sudo make install
$ cd /tmp
7. Okay, now turn the latency back on again and try one more time.
$ sudo tc qdisc add dev eth0 root netem delay 500ms
$ sudo nmap 74.125.227.48 -sn -PE -n --privileged --send-ip --min-rtt-timeout 400ms --max-rtt-timeout 400ms
--max-retries 1 -ddd
Starting Nmap 6.26SVN ( http://nmap.org ) at 2013-07-22 18:36 UTC
Fetchfile found /usr/local/bin/../share/nmap/nmap.xsl
The max # of sockets we are using is: 0
--------------- Timing report ---------------
hostgroups: min 1, max 100000
rtt-timeouts: init 400, min 400, max 400
max-scan-delay: TCP 1000, UDP 1000, SCTP 1000
parallelism: min 0, max 0
max-retries: 1, host-timeout: 0
min-rate: 0, max-rate: 0
---------------------------------------------
Fetchfile found /usr/local/bin/../share/nmap/nmap-payloads
Initiating Ping Scan at 18:36
Scanning 74.125.227.48 [1 port]
Packet capture filter (device eth0): dst host 10.0.2.15 and (icmp or icmp6 or ((tcp or udp or sctp) and (src host
74.125.227.48)))
SENT (0.0197s) ICMP [10.0.2.15 > 74.125.227.48 Echo request (type=8/code=0) id=14074 seq=0] IP [ver=4 ihl=5
tos=0x00 iplen=28 id=43985 foff=0 ttl=51 proto=1 csum=0xa253]
**TIMING STATS** (0.0197s): IP, probes active/freshportsleft/retry_stack/outstanding/retranwait/onbench,
cwnd/ssthresh/delay, timeout/srtt/rttvar/
Groupstats (1/1 incomplete): 1/*/*/*/*/* 10.00/75/* 400000/-1/-1
Current sending rates: 55.71 packets / s, 1559.80 bytes / s.
Overall sending rates: 55.71 packets / s, 1559.80 bytes / s.
SENT (0.4229s) ICMP [10.0.2.15 > 74.125.227.48 Echo request (type=8/code=0) id=64577 seq=0] IP [ver=4 ihl=5
tos=0x00 iplen=28 id=65362 foff=0 ttl=53 proto=1 csum=0x4cd2]
**TIMING STATS** (0.4230s): IP, probes active/freshportsleft/retry_stack/outstanding/retranwait/onbench,
cwnd/ssthresh/delay, timeout/srtt/rttvar/
Groupstats (1/1 incomplete): 1/*/*/*/*/* 10.00/75/* 400000/-1/-1
Current sending rates: 4.75 packets / s, 132.94 bytes / s.
Overall sending rates: 4.75 packets / s, 132.94 bytes / s.
RCVD (0.5316s) ICMP [74.125.227.48 > 10.0.2.15 Echo reply (type=0/code=0) id=14074 seq=0] IP [ver=4 ihl=5 tos=0x00
iplen=28 id=13837 foff=0 ttl=50 proto=1 csum=0x1918]
Found 74.125.227.48 in incomplete hosts list.
We got a ping packet back from 74.125.227.48: id = 64054 seq = 0 checksum = 1481
ultrascan_host_probe_update called for machine 74.125.227.48 state UNKNOWN -> HOST_UP (trynum 0 time: 512042)
Changing ping technique for 74.125.227.48 to icmp type 8 code 0
Moving 74.125.227.48 to completed hosts list with 0 outstanding probes.
Changing global ping host to 74.125.227.48.
Completed Ping Scan at 18:36, 0.53s elapsed (1 total hosts)
Overall sending rates: 3.77 packets / s, 105.66 bytes / s.
pcap stats: 1 packets received by filter, 0 dropped by kernel.
Nmap scan report for 74.125.227.48
Host is up, received echo-reply (0.51s latency).
Final times for host: srtt: 511892 rttvar: 511892 to: 400000
Read from /usr/local/bin/../share/nmap: nmap-payloads.
Nmap done: 1 IP address (1 host up) scanned in 0.56 seconds
Raw packets sent: 2 (56B) | Rcvd: 1 (28B)
8. Yep, 0.53s ping time... that's what we expected! OK, let's get rid of that artificial latency again.
$ sudo tc qdisc del dev eth0 root
Thanks,
Chris JohnsonAttachment:
nmap-cjohnson.diff
Description:
_______________________________________________ Sent through the dev mailing list http://nmap.org/mailman/listinfo/dev Archived at http://seclists.org/nmap-dev/
Current thread:
- Match ICMP echo reply to request in scan_engine.cc Chris Johnson (Jul 23)
- Re: Match ICMP echo reply to request in scan_engine.cc Chris Johnson (Jul 24)
- Re: Match ICMP echo reply to request in scan_engine.cc David Fifield (Aug 06)
- Re: Match ICMP echo reply to request in scan_engine.cc Chris Johnson (Aug 08)
- Re: Match ICMP echo reply to request in scan_engine.cc David Fifield (Aug 08)
- Re: Match ICMP echo reply to request in scan_engine.cc Chris Johnson (Aug 09)
- Re: Match ICMP echo reply to request in scan_engine.cc David Fifield (Aug 16)
- Re: Match ICMP echo reply to request in scan_engine.cc David Fifield (Aug 06)
- Re: Match ICMP echo reply to request in scan_engine.cc Chris Johnson (Jul 24)
