2010-06-17 2 views
3

현재 페이지의 호스트 이름에 대한 최상위 도메인이 무엇인지 알아낼 방법이 있습니까? 내가 가진 문제는 .com 도메인이나 .co.uk와 같은 국제 도메인에 스크립트가있을 수 있다는 것입니다.자바 스크립트로 호스트의 최상위 도메인 파악하기

그래서 : jobs.telegraph.co.uk - 톱 도메인은 : telegraph.co.uk - 상위 도메인은 nytimes.com

문제는 location.hostname 및 document.domain이 전체 도메인을 제공한다는 것입니다.

하나의 경로는 모든 TLD (너무 많은 정보를 가지고 다닐 수있는 목록)를 가지고이를 기반으로 구문 분석하는 것입니다. 또 다른 경로는 국제 문자보다 마지막 문자 "."가 2 자이면 TLD이지만 모든 국제 도메인에 적용되지는 않습니다.

답변

1

확실하지 않습니다. 많은 경우에 의미있는 것은 아닙니다. 예를 들어, jobs.telegraph.co.uk은 분명히 telegraph.co.uk에 사는 The Telegraph의 일부이지만 다른 경우에는 일반적으로 두 번째 수준의 호스트 이름과 관계가없는 하위 도메인이 있습니다. 무료 웹 호스팅 제공 업체.

uk.com과 같은 도메인 아래에 하위 도메인을 등록하여 시스템을 망칠 수있는 CentralNIC와 같은 "의사 NIC"도 있습니다.이 경우 분명히 관계가 없습니다. 예를 들어 avon.uk.com을 참조하십시오.

이들을 무시하더라도 구조가 엉망인 전체 TLD가 있습니다. - .uk가 하나의 예입니다. nhs.uk 및 mod.uk와 같은 두 번째 수준에는 유효한 호스트 이름이 있지만 대부분의 도메인은 bbc.co.uk와 같은 세 번째 수준에 등록되지만 .sch.uk 도메인은 네 번째 수준에서만 등록 할 수 있습니다 (즉, http://learning.oriel.w-sussex.sch.uk/에서 당신은 oriel.w-sussex.sch.uk를 찾고, w-sussex.sch.uk는 유효한 호스트 이름이 될 수 없습니다.

이것이 자바 스크립트에서 수행 될 수 있는지 확실하지 않습니다. 한 가지 가능성은 "이 레벨에서 사용할 수없는 등록"라인을 따라 오류 메시지가 나타날 때까지 각 레벨 (예 : jobs.telegraph.co.uk, telegraph.co.uk, .co.uk)에서 whois 조회를 수행하는 것입니다 "을 선택하고 아래 레벨을 호스트 이름으로 사용하십시오. 불행하게도이 메시지는 레지스트라에 따라 다르다고 생각되지만 가능한 최소한의 호스트 이름 순열보다는 등록자가 적습니다.

0

이 방법으로 해결할 수 있습니까?

<script> 
var doms = ["telegraph.co.uk","jobs.nytimes.com"]; 
function getTLD(str) { 
    var parts = str.split('.'); 
    var slice = (parts[parts.length-2].length==2)?parts.length-3: parts.length-2; 
    return parts.slice(slice).join('.') 
} 
for (var i=0;i<doms.length;i++) { 
    alert(getTLD(doms[i])); 
} 

</script> 
+0

이 그래 –

+0

, "learning.oriel.w-sussex.sch.uk"와 "g.unicauca.edu.co" "www.arnewoodpractice.nhs.uk"(예를 들어)에 실패하고 I 그냥 www가 영국 도트 co.kr에서 도트를 발견! – mplungjan

+0

Erm nhs.uk은 arnewoodpractice.nhs.uk의 TLD입니다. – mplungjan

3

최상위 도메인이 쿠키를 설정할 수있는 첫 번째 도메인입니다. 브라우저는 기본적으로 모든 TLD의 쿠키를 차단합니다. 이전 문장이 사실이라면이 페이지를 악용하여 현재 페이지의 최상위 도메인을 얻을 수 있습니다.

function get_top_domain(){ 
    var i,h, 
    weird_cookie='_weird_get_top_level_domain=cookie', 
    hostname = document.location.hostname.split('.'); 
    for(i=hostname.length-1; i>=0; i--) { 
    h = hostname.slice(i).join('.'); 
    document.cookie = weird_cookie + ';domain=' + h + ';'; 
    if(document.cookie.indexOf(weird_cookie)>-1){ 
     document.cookie = weird_cookie.split('=')[0] + '=;domain=' + h + ';expires=Thu, 01 Jan 1970 00:00:01 GMT;'; 
     return h; 
    } 
    } 
} 
+1

이것은 훌륭합니다. – Mordred

관련 문제