Я пытаюсь написать сканер портов для курса безопасности.Я решил написать это на C на Linux, так как никогда не делал ничего, связанного с сетями, кроме Java.Я использую GCC 4.4.5 на Ubuntu 10.10.У меня есть основная функция, которая анализирует аргументы, а затем вызывает функцию сканирования с результирующими переменными.Вот моя полная программа: http://pastebin.com/DHU7SEQR
Проблема, с которой я столкнулся, заключается в том, что она не работает должным образом (она сообщает, что все порты открыты), если я не распечатаю переменные, полученные от пользователя перед вызовомфункция (или изменить порядок параметров, передаваемых в исполняемый файл), что для меня абсолютно бессмысленно.Обратите внимание на закомментированную строку (150), оставив эту строку закомментированной и откомпилировав с помощью команды
gcc scanner.c -o scanner
, а затем запустив программу с
./scanner -a 127.0.0.1 -b 0 -e 1000 -t 1000
, в результате появится отчет обо всехпорты должны быть открыты.Однако раскомментирование этой строки (т. Е. Распечатка всех переменных перед вызовом функции) приводит к правильному сообщению о состоянии портов.Изменение порядка следования параметров на
./scanner -b 0 -e 1000 -t 1000 -a 127.0.0.1
, похоже, также работает, как и добавление оператора printf к каждому блоку case (даже если не выводятся сами переменные).