예전에 GCP Compute Engine IP 주소 범위 알아내려고 bash 스크립트 짰던 게 있는데 PowerShell 버전으로 다시 표현해 보았다. 사실 GCP의 경우 지금은 아래 API를 제공하고 있어서 불필요하긴 한데...

 

www.gstatic.com/ipranges/goog.json

 

내가 작성한 PowerShell 함수는 아래와 같다.

 

function get_include_record {
    param ($domain)
    $txt = (Resolve-DnsName -Name $domain txt).Strings
    foreach ($line in ($txt -split "\s+")) {
        if ($line -match "include:") {
            get_include_record -domain ($line -split ":")[1]
        } elseif ($line -match "ip4:") {
            ($line -split ":")[1]
        } 
    } 
}

GCP의 경우 _cloud-netblocks.googleusercontent.com 도메인을 질의하면 된다.

 

원래 DNS TXT의 SPF (Sender Policy Framework) 레코드는 발송하는 메일서버가 스팸으로 걸러지지 않기 위해 IP를 DNS에 등록하는 용도이다.

 

네이버 도메인으로 질의해보면 이만큼 나온다.

 

원래 DNS TXT 레코드가 한 줄에 255 자라는 제한이 있기 때문에 발송하는 메일서버가 많으면 SPF는 include 방식으로 처리하는데, KISA RBL은 include를 지원하지 않는다.

 

PowerShell 몇 줄로도 처리 가능한 간단한 recursion인데 KISA에서 왜 지원하지 않는지 모르겠다.

 

spam.kisa.or.kr/white/sub3.do

 

SPF 작성도우미 < White Domain / SPF : 불법스팸대응센터

SPF 작성 도우미 SPF Record를 손쉽고 간편하게 작성할 수 있도록 도와드립니다 . 이 곳에서는 SPF Record를 작성하는 것만 지원해 드릴 뿐, 실제로 귀사(하)의 DNS 에 SPF Record가 출판되는 것은 아닙니다.

spam.kisa.or.kr

 

 

참고로 리눅스 Bash 버전도 올려둔다.

#!/bin/bash

dfs(){
    dig +short $1 txt | grep -oP '(include|ip4):\S+' | while read line; do
        if [ "${line:0:3}" == "ip4" ]; then
            echo ${line:4}
        else
            dfs ${line:8}
        fi
    done
}

dfs $1 | sort -V