テキストファイル(1行に1つのドメイン)からすべてのドメインを検索し、IPアドレス、スペース、ドメイン名、スペース、ドメイン名wwwが出力される別のテキストファイルを生成する方法が必要です。フロントエンドしてください。
たとえば、ソーステキストファイルに2行が含まれている場合:
1.gravatar.com
abcya.com
1.gravatar.comにIPv4アドレスとIPv6アドレスの両方があるため、新しいテキストファイルには3行が含まれています。
72.21.91.121 1.gravatar.com www.1.gravatar.com
2a04:fa87:fffe::c000:4902 1.gravatar.com www.1.gravatar.com
104.198.14.52 abcya.com www.abcya.com
私はUbuntu派生製品を実行しており、nslookupを使用してIPv4およびIPv6アドレスを取得できます。ただし、ソーステキストファイルは2,000を超えるドメインを含むリストなので、手動で実行すると時間がかかり、エラーが発生しやすくなります。
答えがIPアドレスも許可しない場合。ドメインがもう存在しない場合(alwaysbeready.mybigcommerce.comの場合と同様)、nslookupは** server can't find Alwaysbeready.mybigcommerce.com:NXDOMAINを返します。その結果、IPアドレスファイルの代わりにNXDOMAINを使用することもできます。テキスト?
助けてくださる方によろしくお願いします。
答え1
Pythonソリューション
#!/usr/bin/python3
import socket
#this module is core networking module in Python,
#can be used to resolve domain names.
sourcefile = 'sourcefile.txt' #file with domain names
outfile = 'results.txt' #file to write the IP addresses
with open(sourcefile, 'r') as inputf:
#This opens the sourcefile in read mode to see what are the domains
with open(outfile, 'a') as outputf:
#This opens the outfile in append mode to write the results
domains = inputf.readlines()
#This reads all the domains in sourcefile line by line
for domain in domains:
#This for loop will go one by one on domains.
domain = domain.strip("\n")
#as the every domain in the file are in newline,
#the socket function will have trouble, so strip off the newline char
try:
resolution = (socket.getaddrinfo(domain, port=80,type=2))
for ip in resolution:
outputf.write(str(ip[4][0])+" "+domain+ " www."+domain+"\n" )
except:
outputf.write("Could not resolve "+domain+" www."+domain+"\n")
#getaddinfo("domain") gets all the IP addresses.
入力する:
1.gravatar.com
abcya.com
allaboutbirds.org
google.com
akamai.de
出力:
192.0.73.2 1.gravatar.com www.1.gravatar.com
2a04:fa87:fffe::c000:4902 1.gravatar.com www.1.gravatar.com
104.198.14.52 abcya.com www.abcya.com
128.84.12.109 allaboutbirds.org www.allaboutbirds.org
216.58.197.78 google.com www.google.com
2404:6800:4007:810::200e google.com www.google.com
104.127.218.235 akamai.de www.akamai.de
2600:140b:a000:28e::35eb akamai.de www.akamai.de
2600:140b:a000:280::35eb akamai.de www.akamai.de
答え2
bash
次の出力を解析するHackyソリューションnslookup
:
#!/bin/bash
get_lines() {
ips=($(nslookup -type=A "$1" | grep -Po -m1 "Address: \K.*"))
ips+=($(nslookup -type=AAAA "$1" | grep -Po -m1 "has AAAA address \K.*"))
if [ ${#ips[@]} -ne 0 ]; then
printf "%s $1 www.$1\n" "${ips[@]}"
else
printf 'NXDOMAIN %s www.%s\n' "$1" "$1"
fi
}
while read domain; do
if [ -z "$domain" ] || [ "${domain:0:1}" = "#" ]; then
# skip empty line and line starting with '#'
continue
fi
get_lines "$domain"
done < "$1"
説明する:
IPv4 の場合、
grep
IP アドレスを次に指定します。Address:
例:
$ nslookup -type=A 1.gravatar.com Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: Name: 1.gravatar.com Address: 192.0.73.2
IPv6アドレスの場合は、
grep
IPアドレスを次に指定します。has AAAA address
例:
$ nslookup -type=AAAA 1.gravatar.com Server: 8.8.8.8 Address: 8.8.8.8#53 Non-authoritative answer: 1.gravatar.com has AAAA address 2a04:fa87:fffe::c000:4902 Authoritative answers can be found from:
IPv4とIPv6の両方が失敗した場合、出力はです
NXDOMAIN domain www.domain
。#
入力ファイルの空白行またはで始まる行はスキップされます。
出力:
私のテストドメインファイルは次のとおりです。
$ cat domains.txt
1.gravatar.com
abcya.com
alwaysbeready.mybigcommerce.com
# this is a comment followed by a newline
allaboutbirds.org
aliceinwonderland.ca
allcancode.com
テスト実行:
$ ./getips.sh domains.txt
192.0.73.2 1.gravatar.com www.1.gravatar.com
2a04:fa87:fffe::c000:4902 1.gravatar.com www.1.gravatar.com
104.198.14.52 abcya.com www.abcya.com
NXDOMAIN alwaysbeready.mybigcommerce.com www.alwaysbeready.mybigcommerce.com
128.84.12.109 allaboutbirds.org www.allaboutbirds.org
198.168.252.18 aliceinwonderland.ca www.aliceinwonderland.ca
216.239.32.21 allcancode.com www.allcancode.com
2001:4860:4802:32::15 allcancode.com www.allcancode.com
を使用して出力をディレクトリにリダイレクトできます./getips.sh domains.txt > results.txt
。