为什么nmap发送两个数据包来testing一个端口

我使用sudo以root权限运行nmap,所以我认为它具有完全访问创build原始套接字的权限。 当我使用命令时,Wireshark会显示两个用于testing单个端口的数据包

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 

在将数据包传送到Nmap之前,它看起来像是一个libpcap问题。 注意Wireshark和Nmap之间数据包sorting的差异; 即使时间戳相同,打印行的顺序也表明,在第二个SYN数据包发送之后 ,数据包被传送到Nmap。 我们最近在与分组环/ TPACKET接口相关的较新的Linux内核上有一个libpcap 1.5.3 (可能是1.6分支,还没有testing过)的问题,它们在到达时没有传送数据包。 nmap --version的输出是什么?

根本的问题是Linux中的一个错误,它已经被修复,但没有被反向移植 。 我们通过将libpcap升级到版本1.7.3来解决这个问题,该版本有一些解决方法。

考虑到你的屏幕截图,看起来[R.]数据包在被扫描之前被过滤,而nmap使用了它的重传function,因为第一个[S]数据包没有收到任何答案。

你可以使用--max-retries 0来禁用它。

为什么nmap发送两个数据包来testing一个端口?

通常情况下:因为build立TCP连接需要三次握手…发送SYN – >接收SYN-ACK – >发送ACK

在这种情况下:因为来自192.168.110.153的响应是RST, ACK或换句话说:与端口21的连接被拒绝。 可能nmap稍微持久,尝试两次,然后采取不作为答案。