IPの負荷に対してDNSチェックを逆にチェックする方法はありますか。チェックしたいIPのリストがありますか?
私はあなたがこれらを個別に行うことができることを知っています:
Host <ip-address>
そして
Dig -x <ip-address>
また、それらをエクスポートする方法はありますか?
xargs
はoptin --arg-file
を提供します。各行を引数として扱う-L1
オプションを使用すると、作成できる最も簡単なコマンドは次のとおりです。
$ xargs -L1 --arg-file=ip-addr.txt Dig +short -x
google-public-dns-a.google.com.
resolver2.opendns.com.
解決されたドメインの横にIPアドレスを表示する必要がある場合は、次のこともできます。
$ xargs -L1 --arg-file=ip-addr.txt sh -c 'printf "%s: " "$1"; Dig +short -x "$1"' sh
8.8.8.8: google-public-dns-a.google.com.
208.67.220.220: resolver2.opendns.com.
もちろん、xargs
は追加のプロセスです。 ShellとDig
のみを使用する場合はどうなりますか? bashバージョン4以降では、mapfile
またはreadarray
を使用してテキストファイルの行を配列に取得し、ループでアイテムを処理できます。
$ mapfile -t -d $'\n' < ip-addr.txt
$ for i in "${MAPFILE[@]}" ; do printf "%s:" "$i"; Dig +short -x "$i"; done
8.8.8.8:google-public-dns-a.google.com.
208.67.220.220:resolver2.opendns.com.
IPアドレスが少なく、POSIXlyの長いテキストファイルを必要としない場合、set
を使用して値を定位置パラメーターとして定義できます。
$ set -- 8.8.8.8 208.67.220.220
$ for i ; do printf "%s:" "$i"; Dig +short -x "$i"; done
8.8.8.8:google-public-dns-a.google.com.
208.67.220.220:resolver2.opendns.com.
次のようなスクリプトでDig -x $IP_ADDRESS +short
を使用することもできます。
#!/bin/bash
export LC_ALL=C
# without specifying 'in' part, bourne-like shells default
# to iterating over positional parameters
for item
do
domain=$(Dig -x "$item" +short)
# this logic can also be reversed with
# [ "x$domain" = "x" ] && echo "empty" || echo "$domain"
if [ -n "$domain" ] ;
then
echo "$domain"
else
echo "$item" result is NULL
fi
done
サンプル使用のデモ(スペースで区切られたすべてのIPアドレス):
$ ./reverse_dns_lookup.sh 8.8.8.8 74.125.193.94 151.101.193.69
google-public-dns-a.google.com.
ig-in-f94.1e100.net.
151.101.193.69 result is NULL
ご覧のとおり、最後の例では、DNSサーバーは指定したIPアドレスのドメインを見つけられませんでした。そのような場合、別のDNSサーバーを使用できます。たとえば、Dig @208.67.220.220 $IP_ADDRESS +short
のopen_dns
上記のデモでは、IPアドレスは./reverse_dns_lookup.sh ADDRESS1 ADDRESS2 ADDRESS2
のようにコマンドラインで提供されますが、次のようにファイルを使用することもできます。
$ cat ip_addresses.txt | xargs ./reverse_dns_lookup.sh <
google-public-dns-a.google.com.
resolver2.opendns.com.
192.30.253.112 result is NULL
代替スクリプトバージョン:
Dig's
出力からAUTHORITYセクションを出力するスクリプトの代替バージョンは次のとおりです。これは、+short
バージョンよりもはるかに優れており、信頼性が高い場合があります。注:これは8.8.8.8
を使用します。これはGoogleのパブリックDNSです。必要に応じて別のサーバーを使用してください。
#!/bin/bash
export LC_ALL=C
for item
do
domain=$(Dig @8.8.8.8 -x "$item" +noall +authority +answer)
if [ -n "$domain" ] ;
then
echo "$domain"
else
echo "$item" result is NULL
fi
done
デモ:
$ cat ip_addresses.txt | xargs ./reverse_dns_lookup.sh
; <<>> Dig 9.10.3-P4-Ubuntu <<>> @8.8.8.8 -x 8.8.8.8 +noall +authority +answer
; (1 server found)
;; global options: +cmd
8.8.8.8.in-addr.arpa. 21390 IN PTR google-public-dns-a.google.com.
; <<>> Dig 9.10.3-P4-Ubuntu <<>> @8.8.8.8 -x 208.67.220.220 +noall +authority +answer
; (1 server found)
;; global options: +cmd
220.220.67.208.in-addr.arpa. 6674 IN PTR resolver2.opendns.com.
; <<>> Dig 9.10.3-P4-Ubuntu <<>> @8.8.8.8 -x 192.30.253.112 +noall +authority +answer
; (1 server found)
;; global options: +cmd
253.30.192.in-addr.arpa. 10 IN SOA ns1.p16.dynect.net. ops.github.com. 6 3600 600 604800 60
これは、手早く汚れたライナーです:ip-addresses.txtの内容:
$ cat ip-addresses.txt
1.2.3.4
1.1.1.1
222.222.222.222
23.12.34.56
8.8.8.8
208.67.222.220
Txtを、改行で区切られたアドレスを含むファイルに置き換えます。
$ cat ip-addresses.txt | xargs -I % bash -c 'echo "%:$(Dig -x % +short)"' >> Dig-output.txt
上記のようにDig-output.txtに追加すると、そのファイルの内容は以下のようになります。逆DNSルックアップが成功した場合、IP:NAME
、そうでない場合、IP:(NULL)
$ cat Dig-output.txt
1.2.3.4:
1.1.1.1:
222.222.222.222:
23.12.34.56:a23-12-34-56.deploy.static.akamaitechnologies.com.
8.8.8.8:google-public-dns-a.google.com.
208.67.222.220:resolver3.opendns.com.
IPアドレスが別のプロセスから来ている場合は、xargsに直接パイプできます。
編集:ルックアップに失敗した場合にnull(@Sergにヒントを得た)などのWordが必要な場合は、以下のコマンドを使用できます。
$ cat ip-addresses.txt | xargs -I % bash -c '{ query=$(Dig -x % +short); if [ -z $query ]; then query=null;fi; echo %:$query; }'
cat ip-addresses.txt
#IPアドレスをSTDOUT
に出力します。ファイルからcat
したくない場合は、command | xargs ...
のような別のプロセスから直接パイプすることができますxargs -I % bash -c
#パイプの左から各行を取得し、プレースホルダーとして%
を使用し、単一引用符で囲んだbash
コマンドを実行しますDig
プレースホルダーから取得したIPアドレス%
by xargs
、変数query
に割り当てます。結果がnull
(長さゼロ)である場合、文字列 'null' Wordをquery
変数に割り当て、IP:result
として出力しますデモ:
$ cat ip-addresses.txt | xargs -I % bash -c '{ query=$(Dig -x % +short); if [ -z $query ]; then query=null;fi; echo %:$query; }'
1.2.3.4:null
1.1.1.1:null
222.222.222.222:null
23.12.34.56:a23-12-34-56.deploy.static.akamaitechnologies.com.
8.8.8.8:google-public-dns-a.google.com.
208.67.222.220:resolver3.opendns.com.
別の回答に示されているシェルの例に触発されて、Perlのバージョンがより適していると判断したため、このファイル「batch_dns_by_ip.pl」を作成しました。プログラムにパイプするテキストファイルにIPアドレスのリストを配置します。
コードは次のようになり、ファイルを実行可能にする必要があります。
#!/usr/bin/Perl
use strict;
my @domains;
my $address;
while (<>)
{
chomp;
$address = $_;
$address =~ s/ *//g;
@domains = ();
@domains=`Dig -x "$address" +short`;
chomp(@domains);
if ("$domains[0]" eq "")
{
$domains[0] = "NULL";
}
printf("addr: %15s names: %s", $address, $domains[0]);
if ("$domains[1]" eq "")
{
print "\n";
}
else
{
printf(", %s\n", $domains[1]);
}
}
実行は次のようになります。
$ cat myips | ./batch_dns_by_ip.pl
addr: 216.58.219.238 names: lga25s41-in-f14.1e100.net., lga25s41-in-f238.1e100.net.
addr: 151.101.129.69 names: NULL
addr: 8.8.8.8 names: google-public-dns-a.google.com.
addr: 10.49.11.62 names: nyalbdnsvip01.miscny.nyenet., nyalbcwgbvip01-vlan401.miscny.nyenet.
addr: 69.172.201.153 names: NULL
それがお役に立てば幸いです!
nmap
できます
nmap -R -sL -Pn 1.2.3.0/24 | grep '('
-n/-R
DNS解決を行わない/常に解決する[デフォルト:時々]-sL
リストスキャン-スキャンするターゲットをリストするだけです-Pn
すべてのホストをオンラインとして扱います-ホスト検出をスキップします。これを削除して、pingへの応答を取得します。grep
leaveは、逆DNSといくつかの有用な行を解決しました。
特定のDNSサーバーを使用するには、--dns-servers x.x.x.x
を追加します。