如何获得nmap正常关闭连接?

时间:2018-07-25 16:50:11

标签: tcp handshake nmap port-scanning

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

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

反正有没有让nmap进行connect()和使用FIN关闭连接的方法?

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

由于我在这里没有收到太多答复,因此我决定在这样的假设下运行:即使使用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 $2}')  
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 $2}');  
if [[ $ASTATUS == "unfiltered" ]]; then  
        PORT_STATUS="OPEN";  
else  
        PORT_STATUS="FILTERED";  
    fi  
else  
    PORT_STATUS="CLOSED";  
fi  

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