Как я могу заставить Nmap корректно закрывать соединения?

Я использую стандартное сканирование Nmap в качестве средства определения статуса порта в клиентских системах. Недавно до меня дошло, что это вызывает регистрацию ошибок на стороне клиента из-за приема пакета RST во время соединения.

Я изменил nmap, чтобы использовать вместо него tcp connect() (опция -sT), но после проверки пакетов может подтвердить, что пакет RST все еще отправляется для закрытия соединения.

Есть ли способ заставить nmap одновременно выполнять connect () и закрывать соединение с помощью FIN?

Для получения дополнительной информации о точном обмене:

Сканирование по умолчанию:
Источник - SYN
Dest - SYN-ACK
Источник - RST-ACK

Сканирование TCP Connect:
Источник - SYN
Dest - SYN-ACK
Источник - ACK
Источник - РСТ

Что нужно:
Источник - SYN
Dest - SYN-ACK
Источник - ACK
Источник - FIN
Dest - FIN-ACK
Dest - FIN
Источник - FIN-ACK

Обратите внимание, что мне нужно только контролировать то, что происходит на источнике.

1 ответ

Решение

Поскольку я не получил здесь большого ответа, я решил действовать исходя из предположения, что даже при сканировании 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.

Другие вопросы по тегам