일반적인 GNU/Linux 배포판(예: Fedora/Debian/Ubuntu/etc)에서 사용할 수 있는 명령줄 도구를 사용하여 일부 특정 WHOIS 필드(예: 등록자의 조직 이름)의 값을 가져오는 일반적인 방법이 있습니까? 이상적으로는 빌드할 필요가 없습니다. 각 레지스트리 출력 간의 차이를 처리하기 위한 하드 코딩된 사용자 정의 WHOIS 파서?
명령의 출력이 whois
일관되지 않은 것처럼 보이기 때문에 이에 대해 물어볼 가치가 있는 것 같습니다. 예를 들어 다음을 비교하십시오.
$ whois trigger.io
[...]
Owner OrgName : Amir Nathoo
[...]
그리고:
$ whois facebook.com
[...]
Registrant Organization: Facebook, Inc.
[...]
대신, 일부 명령에 인수로 전달할 수 있기를 원합니다.
- 도메인 이름
- 필수 입력 사항
출력을 필수 필드의 값으로 만듭니다. 예를 들어 위의 예를 기반으로 하면 다음과 같습니다.
$ some_whois_command -field organization_name trigger.io
Amir Nathoo
$ some_whois_command -field organization_name facebook.com
Facebook, Inc.
가능합니까?
이상적으로는 , , 및/또는 의 적절한 사용 whois
과 같은 명령 중심 솔루션을 원합니다. 왜냐하면 이러한 옵션을 효과적으로 사용하는 방법을 배우고 싶기 때문입니다. 그러나 필요한 경우 또 다른 올바른 해결책을 받아들일 것입니다.-i
-q
-t
-v
답변1
문제에는 적어도 두 가지 측면이 있는 것 같습니다.
- WHOIS 응답은 공통 스키마를 공유하지 않습니다.
- WHOIS 응답을 구문 분석하고 해당 필드를 단일 스키마에 매핑(예: 적절한 온톨로지 사용)할 수 있는 WHOIS 클라이언트가 부족합니다.이것루비 후이즈프로젝트는 제가 찾아본 것 중 가장 광범위한 노력입니다. 목적은500개 이상의 다양한 WHOIS 서버 각각에 대한 파서를 제공합니다., 개발자는 큰 공로를 인정받을 자격이 있지만 아직 진행 중인 작업입니다.
이것은 유감스러운 상황입니다.
이것IETF이 문제와 기타 WHOIS 문제에 대해 제안된 솔루션은 다음과 같습니다.RDAP(등록 데이터 액세스 프로토콜).
인용하다RFC 7485, RDAP의 기본 원칙을 설명합니다.
이 문서가 발행될 당시
도메인 이름 공간에는 200개 이상의 국가 코드 최상위 도메인(ccTLD)과 400개 이상의 일반 최상위 도메인(gTLD)이 있습니다.
도메인 이름
등록 기관마다 WHOIS 응답 개체 및 형식이 다를 수 있습니다. 각 개체에 대한 단일 데이터 모델을 구축하려면 이러한 모든 데이터 형식에 대한 공통된 이해가
중요합니다.
(강조합니다.)
불행히도 대부분의 (모두?) TLD 등록 기관은 하위 도메인에 WHOIS 서버를 제공하지만,현재까지 두 개의 TLD 등록 기관만이 하위 도메인에 대해 공식적으로 RDAP 서버를 배포했습니다.: CZNIC는 .cz 도메인에 적합하고 NIC Argentina는 .ar 도메인에 적합합니다. 따라서 이는 아직 널리 적용 가능한 TLD 솔루션이 아닙니다. 우리는 다른 모든 레지스트리가 곧 RDAP 서버를 배포하기를 바랄 뿐입니다.
소프트웨어의 경우, 지금까지 POSIX 시스템에서 찾은 유일한 RDAP 명령줄 클라이언트는 다음과 같습니다.nicinfo
.
답변2
파이썬을 사용할 수 있습니다
pip install whois
예를 들어,
#!/bin/python
import whois
print whois.whois('www.facebook.com')['city']
답변3
어떤 TLD에 관심이 있으신가요? .com, .net 및 .org를 빠르게 확인하면 실제 데이터 필드의 이름이 동일합니다. whois foo.org | grep "registrant organization:" 또는 관심 있는 모든 필드를 사용하면 쉽습니다.
다음과 같은 스크립트가 필요한 경우
#!/bin/bash
if [ $# -ne 2 ]
then
echo Usage: $0 fieldcode domain
exit
fi
case $1 in
"ro")
whois $2 | grep "Registrant Organization:"
;;
"te")
whois $2 | grep "Tech Email:"
;;
esac
# or use simple if-thens
if [ $1 == "r" ]
then
whois $2 | grep "Registrant "
fi
이는 다음과 유사한 출력을 제공합니다.
$ ./whoisg r myfqdn.org
Registrant ID: go2016965629
Registrant Name: Contact Privacy Inc. Customer 1241082755
Registrant Organization: Contact Privacy Inc. Customer 1241082755
Registrant Street: 96 Mowat Ave
Registrant City: Toronto
Registrant State/Province: ON
Registrant Postal Code: M4K 3K1
Registrant Country: CA
Registrant Phone: +1.4165385487
Registrant Phone Ext:
Registrant Fax:
Registrant Fax Ext:
Registrant Email: [email protected]
또는
$ ./whoisg te myfqdn.org
Tech Email: [email protected]
화타이