Я читал исходный код nmap, потому что мне хотелось бы узнать, как он обнаруживает, что определенные порты фильтруются или блокируются брандмауэром. У меня есть некоторый опыт работы с сокетами в c, и я создал простые сканеры портов, это легко - если соединение установлено успешно, порт открыт, иначе он закрыт (из-за возврата RST). Но в случае портов с брандмауэром они не возвращают RST-пакет обратно, и мой сканер портов просто «ждет» вечно.
Если у кого-то есть опыт работы с этой темой, пожалуйста, укажите мне части кода nmap, где происходит фактическое сканирование и определение состояния порта, или, по крайней мере, скажите, есть ли другие доступные коды, которые решают эту проблему.