讀取文件並將ip地址列印到另一個文件
我有一個大文件,其中包含 40000 行域名。我想讀取該文件並使用
dig
(或其他方式)在 DNS 中查找域名的 IP 地址,並將它們列印到另一個文件中。我該怎麼做呢?
編輯:一直在用一些建議的解決方案對此進行測試。在大多數情況下:
#!/bin/bash > ips.txt cat test.txt | while read host; do ip=$(getent hosts "$host") if [ $? -ne 0 ]; then echo "Host $host was not resolved."; continue fi ip=$(echo "$ip" | awk '{ print $1 }') echo "Host: $host, IP: $ip" >> ips.txt done
這會產生一個空文件。不知道為什麼這不起作用。
我嘗試了另一種解決方案:
for host in 0.accountkit.com 0.bigclicker.me 0.cdn.ddstatic.com 0.facebook.com 0.fls.doubleclick.net 0.hiveon.net 0.mining.garden do # get ips to host using dig ips=($(dig "$host" a +short | grep '^[.0-9]*$')) for ip in "${ips[@]}"; do printf 'allow\t\t%s\n' "$ip" done done > allowedip.txt
這將列印 IP 地址,但問題是我需要從文件中讀取 DNS 名稱,而不是在腳本本身中。
另一個循環。這個從 讀取主機名列表
hosts
並將每個主機名及其零個或多個 IPv4 地址寫入ips
. 我使用製表符 (\t
) 將主機與其 IP 地址列表分開,並且每個 IP 地址都用空格與下一個 IP 地址分隔:#!/bin/bash while IFS= read -r host do if [[ -n "$host" ]] then ips=$(dig +short "$host" | grep '^[[:digit:].]*$' | xargs) printf "%s\t%s\n" "$host" "$ips" fi done <hosts >ips
範例數據:
源文件
hosts
bbc.co.uk google.co.uk
結果文件
ips
bbc.co.uk 151.101.192.81 151.101.128.81 151.101.64.81 151.101.0.81 google.co.uk 216.58.213.3
你說這
dig
不是要求很好,因為它不是工作的最佳工具。命令之類的工具
host
(在許多作業系統的 3 種實現中可用:一種來自 ISC 的 BIND,一種來自 Knot DNS,另一種來自 djbwares)以人類可讀的形式列印資訊,這必須進行繁瑣的後處理如果想要一個簡單的機器可讀列表,可以去除穀殼。ISC
dig
和 Knot DNSkdig
有一個+short
選項,可以改進這一點(以及dig
/的普通輸出kdig
),但僅限於一次在一個域名上呼叫,需要在 shell 腳本中循環和至少 40,000 個程序來完成這項工作. (這裡的答案之一大約有 160,000 個程序。)另一個工具是 Daniel J. Bernstein 的
dnsip
djbdns 工具集的一部分。您要做的是單行 viaxargs
,因為該工具可以採用多個域名參數:%**貓 domain_names.list** unix.stackexchange.com freebsd.org cr.yp.to % % **xargs dnsip < domain_names.list** 151.101.65.69 151.101.193.69 151.101.1.69 151.101.129.69 96.47.72.84 131.193.32.109 131.193.32.108 %
這在一定程度上減少了程序計數。(一個快速的粗略測試表明減少了 3 個數量級。我的 40,000 個域名的測試列表只產生了 9 個
dnsip
程序。)
dnsipq
當人們想要使用非完全限定域名時,有一個工具:%**貓 domain_names.list** Unix freebsd 加密貨幣 % % **xargs dnsipq < domain_names.list** unix.stackexchange.com 151.101.1.69 151.101.193.69 151.101.65.69 151.101.129.69 freebsd.stackexchange.com 151.101.65.69 151.101.193.69 151.101.1.69 151.101.129.69 crypto.stackexchange.com 151.101.1.69 151.101.129.69 151.101.193.69 151.101.65.69 %
進一步閱讀
- https://unix.stackexchange.com/a/557555/5132
- 丹尼爾 J. 伯恩斯坦 (1999)。
dnsip
. djbwares。- 丹尼爾 J. 伯恩斯坦 (1999)。
dnsipq
. djbwares。- https://unix.stackexchange.com/a/446293/5132