DNS TXT Record spf1 include ip4 추출
예전에 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에서 왜 지원하지 않는지 모르겠다.
참고로 리눅스 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 |
'PowerShell' 카테고리의 다른 글
Install-PackageProvider : 'NuGet' 공급자에 대해 지정된 검색 조건에 일치하는 항목을 찾을 수 없습니다. (1) | 2021.03.19 |
---|
최근에 달린 댓글 최근에 달린 댓글