텍스트 파일에서 IP를 찾아 특정 형식의 다른 텍스트 파일을 생성합니다.

텍스트 파일에서 IP를 찾아 특정 형식의 다른 텍스트 파일을 생성합니다.

텍스트 파일(한 줄에 하나의 도메인)에서 모든 도메인을 찾고 IP 주소, 공백, 도메인 이름, 공백, 도메인 이름 www가 출력되는 다른 텍스트 파일을 생성하는 방법을 원합니다. 프론트엔드하세요.

예를 들어, 소스 텍스트 파일에 두 줄이 포함되어 있는 경우:

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"

설명하다:

  1. IPv4의 경우 grepIP 주소를 다음에 지정합니다.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
    
  2. IPv6 주소의 경우 grepIP 주소를 다음에 지정합니다.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:
    
  3. IPv4와 IPv6가 모두 실패하면 출력은 입니다 NXDOMAIN domain www.domain.

  4. #입력 파일의 빈 줄이나 로 시작하는 줄은 건너뜁니다.

산출:

내 테스트 도메인 파일은 다음과 같습니다.

$ 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.

관련 정보