Как использовать Nmap в PHP exec

Я бы назвал Nmap из PHP.

ЕСЛИ Я это делаю:

exec('nmap', $output); var_dump( $output ); 

Он работает, я получаю классический текст «Использование Nmap».

Но как только я попытался запустить проверку UDP, как

 exec('nmap -p 586 -sU xx.xx.xx.xx', $output); var_dump( $output ); 

Он больше не работает, без вывода.

Что мне не хватает?

С уважением

    Важное замечание: NMAP не полностью работает с пользователем веб-серверов (apache, www-data, …). Только root может делать все с помощью NMAP.

    Я бы использовал popen() .

     $stream = popen('/usr/bin/nmap -p 586 -sU xx.xx.xx.xx', 'r'); while (!feof($stream)) { //Make sure you use semicolon at the end of command $buffer = fread($stream, 1024); echo $buffer, PHP_EOL; } pclose($stream); 

    Или стоит попробовать:

     // Start output buffering ob_start(); // Flush COMPLETE output of nmap fpassthru('/usr/bin/nmap -p 586 -sU xx.xx.xx.xx'); // Capture output buffer contents $output = ob_get_contents(); // Shutdown output buffers ob_end_clean(); 

    Для некоторых функций Nmap требуются права root. -sU Сканирование портов UDP является одним из них. В Linux полный список:

    • -sU UDP-порт сканирует
    • -sS TCP SYN-сканирование
    • -sA/W/M/N/F/X TCP-сканирование с различными флагами
    • -PE/PP/PM обнаружения хоста ICMP- -PE/PP/PM
    • -sO IP-протоколы сканирования
    • -sY/Z SCTP-сканирование
    • -O ОС
    • --traceroute tracerouting
    • Практически все варианты уклонения от IDS

    Излишне говорить, что, вероятно, НЕ ХОРОШАЯ ИДЕЯ, чтобы ваш веб-сервер выполнял команды Nmap как root. Я также предостерегаю вас, чтобы быть очень строгим в отношении того, какой пользовательский ввод вы вводите в командную строку Nmap. Множество функций Nmap можно злоупотреблять для выполнения произвольных функций.

    Попробуйте использовать оператор backtick (`) для запуска Nmap. Это вернет выход в переменную. Так:

     $output = `nmap -p 586 -sU xx.xx.xx.xx`; 

    Подробнее об операторе backtick: http://php.net/manual/en/language.operators.execution.php