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자리 도메인 입니다.