如何让 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 扫描类似的结果。
我使用 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 扫描类似的结果。