Language/Go2014. 2. 2. 18:04

Whois 도메인 검색에서 생각보다 3자리수 도메인이 많은 관계로 한번 찾아보도록 하겠습니다.

whois 도메인 api 를 사용하였고, xml 파싱하여 결과를 확인 합니다.


아래는 소스 

package main

import (
	"fmt"
	"os"
	"encoding/xml"
	"net/http"
	"io/ioutil"
)

type WError struct{
	Name string `xml:"name"`
	ErrorCode string `xml:"error_code"`
}
type Krdomain struct {
	XMLName xml.Name `xml:"krdomain"`
	Name string `xml:"name"`
	WError	[]WError `xml:"error"`
}

type Whois struct {
	XMLName xml.Name `xml:"whois"`
	Krdomain []Krdomain `xml:"krdomain"`
}

func (w Whois) printResult() bool{
	if w.Krdomain != nil && w.Krdomain[0].Name != `` {
		return true
	}else if w.Krdomain[0].WError != nil && w.Krdomain[0].WError[0].ErrorCode == `100` { // 유보어등 처리
		return false
	}else{
		return true
	}
}

func main() {
	finddomain()
}

func finddomain(){
	apikey := `2014012*******************` // WHOIS에서 제공받은 API키 
	domains := makestr()
	for i := 0; i < len(domains);i++ {
		if WhoisCrawl(apikey,domains[i]+`.kr`) == false {
			fmt.Printf("%s.kr \n",domains[i])
		}
	}
}

func makestr() ([]string){
	ch := `abcdefghijklmnopqrstuvwxyz` // 숫자와 - 도 있으나 그건 귀찮으니 뺍니다.
	p := make([]string,len(ch)*len(ch)*len(ch))
	cnt := 0
	for i := 0 ; i < len(ch) ; i++ {
		for j := 0 ; j < len(ch) ; j++ {
			for k := 0 ; k < len(ch) ; k++ {
				f := string(ch[i]) + string(ch[j]) + string(ch[k])
				p[cnt] = f
				cnt++
				
			}
		}
	}
	return p
	
}

func WhoisCrawl(apikey string,findurl string) (bool) {
	url := `http://whois.kisa.or.kr/openapi/whois.jsp?query=` + findurl + `&key=` + apikey
	
	resp, err := http.Get(url)
    if err != nil {
        fmt.Println("We have an error!: ", err)
        return false
    }
    defer resp.Body.Close()
	body, _ := ioutil.ReadAll(resp.Body)
	
	v := Whois{}
	err = xml.Unmarshal(body, &v)
	return v.printResult()
}


실행해보면 가끔 실패하는 걸 빼면 이상없이 작동 합니다.

실행결과중 일부를 공개하니 필요하신분 쓰세요.


주인없는 3자리 도메인 입니다.

클릭하기




Posted by Peter Ryu