Системные аргументы Ruby

Я пытаюсь использовать system запустить nmap из программы ruby. Я хочу избежать некоторых аргументов для предотвращения внедрения оболочки, поэтому я использую следующую форму:

system('nmap', '-sn', hostname)

Это прекрасно работает, однако я хочу использовать -oX - Возможность вывода XML в стандартный вывод. Следующий код не работает, хотя:

system('nmap', '-sn', '-oX -', hostname)

-oX - Аргумент, кажется, игнорируется, может кто-нибудь предложить обходной путь?

1 ответ

Решение

Как system также избегает пробелов в аргументах, ваш системный вызов с -oX - будет эффективно называться

nmap "-sn" "-oX -" "example.com"

с пробелом, являющимся частью одного аргумента. Таким образом, он не будет считаться допустимым аргументом для nmap. Чтобы это исправить, вы должны передать два аргумента. Здесь пробел в одном аргументе не будет экранирован:

system('nmap', '-sn', '-oX', '-', hostname)
Другие вопросы по тегам