我正在尝试使用system
从ruby程序运行nmap。我想逃避一些防止shell注入的参数,所以我使用以下形式:
system('nmap', '-sn', hostname)
这很好,但是我想使用-oX -
选项将xml输出到stdout。以下代码似乎不起作用:
system('nmap', '-sn', '-oX -', hostname)
似乎忽略了-oX -
参数,有人可以建议解决方法吗?
答案 0 :(得分:7)
由于system
也会转义参数中的空格,因此系统调用-oX -
将被有效地调用为
nmap "-sn" "-oX -" "example.com"
空格是单个参数的一部分。因此,它不会被视为nmap的有效参数。要解决这个问题,你实际上必须将它作为两个参数传递。这里,单个参数中的空格不会被转义:
system('nmap', '-sn', '-oX', '-', hostname)