首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nmap中传递Dig命令

在nmap中传递Dig命令
EN

Unix & Linux用户
提问于 2021-04-25 10:55:54
回答 1查看 264关注 0票数 -2

我有一个问题要获取dig命令的结果并将其传递给nmap命令,如下所示:

代码语言:javascript
复制
for ip in 'dig mydomain.com -t ns +short'
do nmap $ip
done
EN

回答 1

Unix & Linux用户

发布于 2021-04-25 16:47:22

dig命令返回多行输出。每一行都是一个主机名。您希望在每个主机名上运行nmap

xargs实用程序用于使用参数作为xargs的输入来运行命令:

代码语言:javascript
复制
dig mydomain.com -t ns +short | xargs -I {} nmap {}

这将对来自nmap的每一行输出运行一次dig

或者,如果您希望并行运行nmap,一次运行两次,如果您的xargs实现支持它(我不知道这对您是否有意义,但可以这样做),

代码语言:javascript
复制
dig mydomain.com -t ns +short | xargs -I {} -P 2 nmap {}

另一种方法是将dig在显式while循环中的输出行读入一个shell变量,然后对该变量的值调用nmap

代码语言:javascript
复制
dig mydomain.com -t ns +short |
while IFS= read -r host; do
    nmap "$host"
done

其中的一个变体是在数组中收集主机名(这需要一个了解数组的shell ),并一次对所有数组元素调用nmap

代码语言:javascript
复制
dig mydomain.com -t ns +short |
{ readarray -t hosts; nmap "${hosts[@]}"; }

或者,使用位置参数并做同样的事情:

代码语言:javascript
复制
dig mydomain.com -t ns +short |
{
    set --
    while IFS= read -r host; do
        set -- "$@" "$host"
    done
    nmap "$@"
}

或者,只需将-iL选项与nmap一起使用,并以这种方式输入主机名。

代码语言:javascript
复制
nmap -iL <( dig mydomain.com -t ns +short )

或者,如果没有进程替代,

代码语言:javascript
复制
dig mydomain.com -t ns +short | nmap -iL -

代码的主要问题是,您的循环将使用文字字符串dig mydomain.com -t ns +short作为$ip的值进行一次迭代。

您还使用了循环主体中未引用的$ip,以及对nmap的调用,这意味着在调用该实用程序之前,shell将将其值拆分为多个单词。nmap实用程序将使用单词digmydomain.com-tns+short作为其参数。然后,它将继续抱怨-t选项,而它并不完全理解这个选项。

现在,您可以通过将单引号更改为backticks来“修复”这个问题,这会将单引号字符串转换为命令substiution,但对于遍历命令输出的一般方法来说,这是非常不优雅的,特别是因为它依赖于将输出拆分为空格上的单词,并对每个单词应用文件名全局化,还因为shell需要在开始循环的第一次迭代之前读取命令的所有输出。

以上代码的所有变体都是解决读取某些命令的输出并将其逐行输入nmap的更好方法。

票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/646637

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档