Я хочу реализовать программу на Linux C для выполнения следующей задачи: она использует сканирование FIN для сканирования всех открытых портов хоста.
Вот краткое описание для сканирования FIN (пропустите, если вы уже знаете это): Википедия: FIN сканирование
При сканировании FIN открытый порт не будет отвечать ни в какой форме, а закрытый порт будет отправлять обратно пакет RST. Знаете, у каждого компьютера есть 65536 возможных портов. Я не нашел некоторый исходный код, который может дать мне несколько указаний.
И моя идея, вроде низкой эффективности, такова: основная программа итеративно отправляет пакет FIN на каждый порт, а поток отвечает за получение обратной связи (пакет RST). Этот поток работает только в течение определенного периода времени и после тайм-аута завершается. После этого основная программа проверит и определит, какие порты еще не были RST.
Я думаю, что более серьезная проблема этой схемы в том, что она недостаточно надежна, поскольку время ожидания трудно определить. Кто-нибудь может предложить лучшую схему, пожалуйста?