자신의 ip 주소로 DNS주소 알아내는 함수가 있나요?

porcokang의 이미지

함수가 없으면 먼가 다른 방법이 있을것 같은데..
예제소스있으면 알려주세요.

gethostbyaddr()함수가 계속 널값만 리턴할때 어디를 사펴봐야 하는건지도 좀 알려주세요ㅜㅜ

Jpark의 이미지

"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을 리턴할 것입니다.

JPark의 이미지

너무 많은 내용을 담아서 그런지 중간 작성 내용이 짤리고 올라갔네요..

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

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.