Системные аргументы 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)