在bash脚本中加快dig -x的速度

时间:2019-03-06 16:01:24

标签: linux bash loops dig

在我的大学里,我必须作为练习来运行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

1 个答案:

答案 0 :(得分:0)

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

override func isEqual(object: AnyObject?) -> Bool {
        if let object = object as? MyClass {
       // check for every ivar that should be equal
            return foo == object.foo && bar == object.bar
        } else {
            return false
        }
    }

请注意,这不能保证输出的顺序(并且依靠#!/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\0' "$network" "$x" "$y" done done | xargs -0 -P64 bash -c 'lookupArgs "$@"' _ >hosts_a_b.txt 函数对每个结果执行一个lookupArgs系统调用)-但是输出是可排序的,因此您应该可以重新排序。否则,通过切换到GNU并行-大的perl脚本,而GNU xargs的小,简单,相对低功能的实现,可以得到有序的输出(并确保结果的原子性)。