为什么 nmap 发送两个数据包来测试单个端口

为什么 nmap 发送两个数据包来测试单个端口

我使用 sudo 以 root 权限运行 nmap,因此我假设它具有创建原始套接字的完全访问权限。当我使用以下命令时,Wireshark 显示用于测试单个端口的两个数据包

sudo nmap 192.168.110.153 -p21 

这是正常行为吗?为什么?

在此处输入图片描述

sudo nmap 192.168.110.153 -p21 --packet-trace

Starting Nmap 6.40 ( http://nmap.org ) at 2015-05-19 19:18 BST
SENT (0.0447s) ARP who-has 192.168.110.153 tell 192.168.110.155
RCVD (0.0450s) ARP reply 192.168.110.153 is-at 00:0C:29:F4:05:E0
NSOCK INFO [0.2450s] nsi_new2(): nsi_new (IOD #1)
NSOCK INFO [0.2450s] nsock_connect_udp(): UDP connection requested to 127.0.1.1:53 (IOD #1) EID 8
NSOCK INFO [0.2460s] nsock_read(): Read request from IOD #1 [127.0.1.1:53] (timeout: -1ms) EID 18
NSOCK INFO [0.2460s] nsock_trace_handler_callback(): Callback: CONNECT SUCCESS for EID 8 [127.0.1.1:53]
NSOCK INFO [0.2460s] nsock_trace_handler_callback(): Callback: WRITE SUCCESS for EID 27 [127.0.1.1:53]
NSOCK INFO [0.2740s] nsock_trace_handler_callback(): Callback: READ SUCCESS for EID 18 [127.0.1.1:53] (46 bytes): *%...........153.110.168.192.in-addr.arpa.....
NSOCK INFO [0.2740s] nsock_read(): Read request from IOD #1 [127.0.1.1:53] (timeout: -1ms) EID 34
NSOCK INFO [0.2740s] nsi_delete(): nsi_delete (IOD #1)
NSOCK INFO [0.2740s] msevent_cancel(): msevent_cancel on event #34 (type READ)
SENT (0.2751s) TCP 192.168.110.155:45170 > 192.168.110.153:21 S ttl=39 id=28633 iplen=44  seq=3053138125 win=1024 <mss 1460>
SENT (0.3754s) TCP 192.168.110.155:45171 > 192.168.110.153:21 S ttl=46 id=8796 iplen=44  seq=3053072588 win=1024 <mss 1460>
RCVD (0.2759s) TCP 192.168.110.153:21 > 192.168.110.155:45170 RA ttl=64 id=14442 iplen=40  seq=0 win=0 
RCVD (0.3756s) TCP 192.168.110.153:21 > 192.168.110.155:45171 RA ttl=64 id=14443 iplen=40  seq=0 win=0 
Nmap scan report for 192.168.110.153
Host is up (0.00047s latency).
PORT   STATE  SERVICE
21/tcp closed ftp
MAC Address: 00:0C:29:F4:05:E0 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 0.50 seconds

答案1

这似乎是libpcap在将数据包传送到 Nmap 之前对其进行排队时出现的问题。请注意 Wireshark 和 Nmap 之间的数据包排序差异;即使时间戳相同,打印行的顺序也表明数据包已传送到 Nmap第二个 SYN 数据包已发送。我们最近遇到过libpcap 1.5.3 的问题(也可能是 1.6 分支,尚未测试)在较新的 Linux 内核上与数据包环/TPACKET 接口有关,数据包到达时无法传送。 的输出是什么nmap --version

根本问题是 Linux 中的一个错误,已修复但未反向移植。我们在开发过程中通过将 libpcap 升级到版本 1.7.3 解决了这个问题,该版本有一些解决方法。

答案2

从您的屏幕截图可以看出,[R.]数据包在到达您正在扫描的机器之前已经被过滤,并且 nmap 使用了其重传功能,因为第一个[S]数据包没有收到任何答复。

您可以使用 禁用此功能--max-retries 0

答案3

为什么 nmap 为了测试单个端口要发送两个数据包?

通常情况下:由于需要三次握手建立 TCP 连接... 发送 SYN -> 接收 SYN-ACK -> 发送 ACK

在这种情况下:因为来自 192.168.110.153 的响应是RST, ACK ,或者换句话说:到端口 21 的连接被拒绝。nmap 可能有点执着,在接受否定答案之前会尝试两次。

相关内容