Как я могу заставить 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.