gethostbyaddr()이 NULL값을 리턴하는 경우는 지정한 IP 주소에 대한 도메인 네임 또는 호스트 네임 정보가 존재하지 않는 경우입니다.
gethostbyaddr()는 (호스트의 설정에 따라) 호스트 내부의 /etc/hosts 파일의 주소 테이블 같은 호스트의 로컬 정보와 DNS 질의를 통해 얻는 정보를 조회하여 그 결과값을 리턴합니다.
gethostbyaddr()에 인자로 넣은 IP 주소를 DNS 질의를 통한 조회가 필요한 주소인 경우, 그리고 그 결과가 NULL이었다면, 이는 그 IP 주소에 대한 reverse domain name 정보가 설정되어 있지 않은 경우에 해당합니다.
gethostbyaddr()가 DNS 질의를 하는 방식은 아래와 같습니다.
만일 www.isc.org (204.152.184.88)의 주소 204.152.184.88에 대해 gethostbyaddr()을 호출하는 경우라 가정한다면,
gethostbyaddr()는 DNS에 대해 도메인 네임 "88.184.152.204.in-addr.arpa."에 대한 PTR 타입의 질의를 수행합니다.
곧, "204.152.184.88"라는 주소에 대해 이에 대응하는 도메인 네임 "88.184.152.204.in-addr.arpa."을 자동으로 산출하고, 이 도메인 네임에 대해 PTR 질의를 합니다. 인터넷의 DNS에는 이와 같이 IP 주소에 대한 도메인 네임(호스트 네임) 정보를 매핑하기 위한 도메인 네임 체계를 구성하고 있습니다.
"204.152.184.88" 경우에 대해 BIND DNS의 유틸리티 dig을 사용하여 그 설정된 데이터를 확인하는 방법은 아래와 같습니다.
;; QUESTION SECTION:
;88.184.152.204.in-addr.arpa. IN PTR
;; ANSWER SECTION:
88.184.152.204.in-addr.arpa. 3600 IN PTR external.isc.org.
;; AUTHORITY SECTION:
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.nrt1.isc.org.
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.sth1.isc.org.
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.isc.org.
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.lga1.isc.org.
;; ADDITIONAL SECTION:
ns-ext.nrt1.isc.org. 3083 IN A 192.228.90.19
ns-ext.sth1.isc.org. 3083 IN A 192.228.89.19
ns-ext.isc.org. 83660 IN AAAA 2001:4f8:0:2::13
ns-ext.isc.org. 15015 IN A 204.152.184.64
ns-ext.lga1.isc.org. 3083 IN A 192.228.91.19
여기에서 "88.184.152.204.in-addr.arpa. 3600 IN PTR external.isc.org." 이라는 응답을 얻게 됩니다. 이 응답은 88.184.152.204.in-addr.arpa.(204.152.184.88)의 도메인 네임(호스트 네임)은 "external.isc.org"이라는 의미입니다.
위와 같이 해당 주소에 대한 도메인 네임 매핑 설정이 되어 있다면, gethostbyaddr()는 "external.isc.org"이라는 네임을 리턴하게 됩니다.
NULL을 리턴하는 경우는 위와 같은 매핑 데이터를 DNS에 설정하지 않은 경우에 해당합니다.
예를 들어 www.naver.com의 IP 주소는 222.122.84.250인데, 이 222.122.84.250에 대해 gethostbyaddr()를 호출하면 NULL이 리턴됩니다.
위와 같이, "250.84.122.222.in-addr.arpa. IN PTR" 에 대한 데이터가 없는 것으로 응답됩니다.
응답 출력 중에 "status: NXDOMAIN"은 해당 도메인 네임 "250.84.122.222.in-addr.arpa."이 설정되어 있지 않다는 의미입니다.
gethostbyaddr() 함수를 사용해서 IP 주소로써 그 호스트 네임을 파악하는 것이 매력적으로 느껴질 수 있지만, 현실적으로는 모든 IP 주소에 대해 해당하는 호스트 네임을 정확히 매핑하여 설정하고 있지는 않습니다. 국내의 IP 주소들은 거의 대부분 gethostbyaddr() 함수를 호출해서 조회해 보면 NULL을 리턴할 것입니다.
gethostbyaddr 함수
"DNS 주소"라고 표현한 것은 도메인 네임을 의미하는 것이라 보여집니다.
gethostbyaddr()이 NULL값을 리턴하는 경우는 지정한 IP 주소에 대한 도메인 네임 또는 호스트 네임 정보가 존재하지 않는 경우입니다.
gethostbyaddr()는 (호스트의 설정에 따라) 호스트 내부의 /etc/hosts 파일의 주소 테이블 같은 호스트의 로컬 정보와 DNS 질의를 통해 얻는 정보를 조회하여 그 결과값을 리턴합니다.
gethostbyaddr()에 인자로 넣은 IP 주소를 DNS 질의를 통한 조회가 필요한 주소인 경우, 그리고 그 결과가 NULL이었다면, 이는 그 IP 주소에 대한 reverse domain name 정보가 설정되어 있지 않은 경우에 해당합니다.
gethostbyaddr()가 DNS 질의를 하는 방식은 아래와 같습니다.
만일 www.isc.org (204.152.184.88)의 주소 204.152.184.88에 대해 gethostbyaddr()을 호출하는 경우라 가정한다면,
gethostbyaddr()는 DNS에 대해 도메인 네임 "88.184.152.204.in-addr.arpa."에 대한 PTR 타입의 질의를 수행합니다.
곧, "204.152.184.88"라는 주소에 대해 이에 대응하는 도메인 네임 "88.184.152.204.in-addr.arpa."을 자동으로 산출하고, 이 도메인 네임에 대해 PTR 질의를 합니다. 인터넷의 DNS에는 이와 같이 IP 주소에 대한 도메인 네임(호스트 네임) 정보를 매핑하기 위한 도메인 네임 체계를 구성하고 있습니다.
"204.152.184.88" 경우에 대해 BIND DNS의 유틸리티 dig을 사용하여 그 설정된 데이터를 확인하는 방법은 아래와 같습니다.
# dig -x 204.152.184.88
; <<>> DiG 9.3.2 <<>> -x 204.152.184.88
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 10174
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 4, ADDITIONAL: 5
;; QUESTION SECTION:
;88.184.152.204.in-addr.arpa. IN PTR
;; ANSWER SECTION:
88.184.152.204.in-addr.arpa. 3600 IN PTR external.isc.org.
;; AUTHORITY SECTION:
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.nrt1.isc.org.
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.sth1.isc.org.
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.isc.org.
184.152.204.in-addr.arpa. 73343 IN NS ns-ext.lga1.isc.org.
;; ADDITIONAL SECTION:
ns-ext.nrt1.isc.org. 3083 IN A 192.228.90.19
ns-ext.sth1.isc.org. 3083 IN A 192.228.89.19
ns-ext.isc.org. 83660 IN AAAA 2001:4f8:0:2::13
ns-ext.isc.org. 15015 IN A 204.152.184.64
ns-ext.lga1.isc.org. 3083 IN A 192.228.91.19
;; Query time: 357 msec
;; SERVER: 168.126.63.1#53(168.126.63.1)
;; WHEN: Sat Sep 23 08:59:02 2006
;; MSG SIZE rcvd: 293
여기에서 "88.184.152.204.in-addr.arpa. 3600 IN PTR external.isc.org." 이라는 응답을 얻게 됩니다. 이 응답은 88.184.152.204.in-addr.arpa.(204.152.184.88)의 도메인 네임(호스트 네임)은 "external.isc.org"이라는 의미입니다.
위와 같이 해당 주소에 대한 도메인 네임 매핑 설정이 되어 있다면, gethostbyaddr()는 "external.isc.org"이라는 네임을 리턴하게 됩니다.
NULL을 리턴하는 경우는 위와 같은 매핑 데이터를 DNS에 설정하지 않은 경우에 해당합니다.
예를 들어 www.naver.com의 IP 주소는 222.122.84.250인데, 이 222.122.84.250에 대해 gethostbyaddr()를 호출하면 NULL이 리턴됩니다.
이를 dig으로 확인하면,
dig -x 222.122.84.250
; <<>> DiG 9.3.2 <<>> -x 222.122.84.250
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 40195
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;250.84.122.222.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
84.122.222.in-addr.arpa. 9862 IN SOA rev1.kornet.net. domain.rev1.kornet.net. 2001040300 43200 3600 604800 43200
;; Query time: 9 msec
;; SERVER: 168.126.63.1#53(168.126.63.1)
;; WHEN: Sat Sep 23 09:05:43 2006
;; MSG SIZE rcvd: 103
위와 같이, "250.84.122.222.in-addr.arpa. IN PTR" 에 대한 데이터가 없는 것으로 응답됩니다.
응답 출력 중에 "status: NXDOMAIN"은 해당 도메인 네임 "250.84.122.222.in-addr.arpa."이 설정되어 있지 않다는 의미입니다.
gethostbyaddr() 함수를 사용해서 IP 주소로써 그 호스트 네임을 파악하는 것이 매력적으로 느껴질 수 있지만, 현실적으로는 모든 IP 주소에 대해 해당하는 호스트 네임을 정확히 매핑하여 설정하고 있지는 않습니다. 국내의 IP 주소들은 거의 대부분 gethostbyaddr() 함수를 호출해서 조회해 보면 NULL을 리턴할 것입니다.
메시지 내용이 짤리는 군요
너무 많은 내용을 담아서 그런지 중간 작성 내용이 짤리고 올라갔네요..
IP 주소 --> 호스트 네임 설정이 되어 있지 않은 경우는 아래와 같이 dig을 사용하여 직접 확인할 수 있습니다.
www.naver.com의 IP 주소 222.122.84.250에 대한 경우입니다.
# dig -x 222.122.84.250
; <<>> DiG 9.3.2 <<>> -x 222.122.84.250
;; global options: printcmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 40195
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;250.84.122.222.in-addr.arpa. IN PTR
;; AUTHORITY SECTION:
84.122.222.in-addr.arpa. 9862 IN SOA rev1.kornet.net. domain.rev1.kornet.net. 2001040300 43200 3600 604800 43200
;; Query time: 9 msec
;; SERVER: 168.126.63.1#53(168.126.63.1)
;; WHEN: Sat Sep 23 09:05:43 2006
;; MSG SIZE rcvd: 103
댓글 달기