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