在 bash 脚本中加速 dig -x

Speed up dig -x in bash script

我必须 运行 作为我大学的练习 bash 脚本来反向查找他们拥有的 B class 网络块的所有 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[=10=]' "$network" "$x" "$y"
  done
done | xargs -0 -P64 bash -c 'lookupArgs "$@"' _ >hosts_a_b.txt

请注意,这不能保证输出顺序(并且依赖于 lookupArgs 函数对每个结果执行一个 write() 系统调用)——但输出是可排序的,因此您应该能够重新排序.否则,可以通过切换到 GNU parallel 获得有序输出(并确保结果的原子性)——一个大型 perl 脚本,与 GNU xargs 的小型、简单、相对低功能的实现相比。