如何让 nmap 优雅地关闭连接?

How can I get nmap to close connections gracefully?

我使用 nmap 的默认隐形扫描作为确定客户端系统端口状态的方法。最近我注意到,由于在连接期间接收到 RST 数据包,这导致客户端记录错误。

我已将 nmap 修改为使用 tcp connect()(-sT 选项),但在查看数据包时,可以确认 RST 数据包仍在发送以关闭连接。

有没有办法让 nmap 执行 connect() 并关闭与 FIN 的连接?

有关确切交易所的更多信息:

默认扫描:
来源 - SYN
目的地 - SYN-ACK
来源 - RST-ACK

TCP连接扫描:
来源 - SYN
目的地 - SYN-ACK
来源 - ACK
来源 - RST

需要什么:
来源 - SYN
目的地 - SYN-ACK
来源 - ACK
来源 - FIN
目的地 - FIN-ACK
目的地 - FIN
来源 - FIN-ACK

请注意,我只需要控制源上发生的事情。

由于我在这里没有收到太多回复,我决定在这样的假设下操作:即使使用 TCP connect() 扫描,出于性能原因 nmap 也会与 RST 断开连接。

我的最终解决方案是混合两个单独的扫描:

FIN 扫描 - 区分封闭和开放|过滤
ACK扫描——区分过滤和未过滤

我使用 bash 通过以下条件语句在所有三种状态之间进行确定:

FSTATUS=$(sudo nmap -sF ${HL7_OUTBOUND_IP} -p ${HL7_OUTBOUND_PORT} -Pn 2>/dev/null | grep "^${HL7_OUTBOUND_PORT}" | awk '{print }')  
if [[ $FSTATUS == "filtered" || $FSTATUS == 'open|filtered' ]]; then  
    ASTATUS=$(sudo nmap -sA ${HL7_OUTBOUND_IP} -p ${HL7_OUTBOUND_PORT} -Pn 2>/dev/null | grep "^${HL7_OUTBOUND_PORT}" | awk '{print }');  
if [[ $ASTATUS == "unfiltered" ]]; then  
        PORT_STATUS="OPEN";  
else  
        PORT_STATUS="FILTERED";  
    fi  
else  
    PORT_STATUS="CLOSED";  
fi  

这区分了所有三种状态,并且没有发送 RST,让我得到与 SYN 扫描类似的结果。