加快bash脚本中的dig -x



我必须在我的大学中作为练习作为bash脚本,以逆转其拥有的B类网络块的所有DNS条目。

这是我拥有的最快,但要走了。任何帮助优化此代码的帮助?

#!/bin/bash
network="a.b"
CMD=/usr/bin/dig
for i in $(seq 1 254); do
    for y in $(seq 1 254); do
        answer=`$CMD -x $network.$i.$y +short`; 
        echo $network.$i.$y ' resolves to ' $answer >> hosts_a_b.txt;
    done
done

使用gnu xargs一次运行64个进程可能看起来像:

#!/usr/bin/env bash
lookupArgs() {
  for arg; do
    # echo entire line together to ensure atomicity
    echo "$arg resolves to $(dig -x "$arg" +short)"
   done
}
export -f lookupArgs
network="a.b"
for (( x=1; x<=254; x++ )); do
  for (( y=1; y<=254; y++ )); do
    printf '%s.%s.%s' "$network" "$x" "$y"
  done
done | xargs -0 -P64 bash -c 'lookupArgs "$@"' _ >hosts_a_b.txt

请注意,这不能保证输出顺序(并且依赖于lookupArgs功能执行一个write() SYSCALL每个结果) - 但输出是可分类的,因此您应该能够重新订购。否则,可以通过切换到GNU并行来获得有序的输出(并确保结果的原子性) - 一个大的Perl脚本,VS GNU Xargs的小型,简单,相对较低的功能实现。

当时的一个公平片段刚刚开始每个地址的dig命令。

最好是处理一个命令中合理数量的地址,然后后处理以产生您想要的输出。(如果您不喜欢原始输出,请添加我在此答案结束时给出的sed命令。)

对于A/16网络,我建议这样的东西:

   &#x23;/bin/bash    n = 192.168。    printf%s \ n -x" $ n" {0..255}。{0..255} |    XARGS -R -N64 -P64 DIG  NOALL  ANS  NOCL  NOTTL

-n64表示dig的每个调用将根据结果名称的长度输出约3800字节。只要每个dig的整个输出小于4096字节,它将写为单个write() syscall。

如果您的域名长域名导致交错,最简单的修复是减少-n选项,但这会使它变慢。

缓解这种情况的另一种方法是将dig的每个调用写入单独的输出文件,然后在末尾组合。例如:

   &#x23;/bin/bash    d ="/tmp/tmpdir $$"    mkdir" $ d"    n = 192.168。    p = 0 w = 64    for((C = 0; C&LT; 256;    c)do        ((   p&lt; = w))||等待-n        dig  noall  ans  nocl  nottl" $ n $ c"。{0..255}&gt;" $ d/$ c"&amp;    完毕    等待    猫" $ d"/*

最后,如果您可以管理权威名称服务器,则可以配置名称服务器以允许区域传输到您选择的主机。然后,您可以使用一个命令在几秒钟内获得所有内容:

   &#x23;/bin/bash    dig @ns.your.domain。  noall  ans  nocl  nottl axfr  168.192  .in-addr.arpa

我上面给出的命令输出了RAW dig格式;您可以使用这样的过滤器将其转换为请求的格式:

   &#x23;/bin/bash    (上述命令...) |    sed's/^([0-9。]*) ..*[:space:]]/ 1  t/        s/ $///        s/^(。*)。(。*)。(。*)。(。         s/ t/解决到/'

相关内容

  • 没有找到相关文章

最新更新