fix parse domain status issue
This commit is contained in:
parent
6a8915039e
commit
83cfd8c5e7
37
parse.go
37
parse.go
@ -1,17 +1,12 @@
|
|||||||
package whois
|
package whois
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
func parse(domain string, result string) {
|
func parse(domain string, result string) (Result, error) {
|
||||||
os.WriteFile(domain+".txt", []byte(result), 0644)
|
|
||||||
ext := getExtension(domain)
|
ext := getExtension(domain)
|
||||||
secExt := getExtension(strings.TrimSuffix(domain, "."+ext))
|
|
||||||
_ = secExt
|
|
||||||
var data Result
|
var data Result
|
||||||
var err error
|
var err error
|
||||||
switch ext {
|
switch ext {
|
||||||
@ -24,10 +19,7 @@ func parse(domain string, result string) {
|
|||||||
default:
|
default:
|
||||||
data, err = commonParser(domain, result)
|
data, err = commonParser(domain, result)
|
||||||
}
|
}
|
||||||
fmt.Println(err)
|
return data, err
|
||||||
fmt.Println(data.domain, data.registerDate, data.expireDate, data.nsServers)
|
|
||||||
fmt.Println(data.exists, data.statusRaw, data.nsServers)
|
|
||||||
fmt.Printf("%+v\n%+v\n", data.adminInfo, data.registerInfo)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func commonParser(domain, data string) (Result, error) {
|
func commonParser(domain, data string) (Result, error) {
|
||||||
@ -38,6 +30,7 @@ func commonParser(domain, data string) (Result, error) {
|
|||||||
var r, a, t PersonalInfo
|
var r, a, t PersonalInfo
|
||||||
|
|
||||||
split := strings.Split(data, "\n")
|
split := strings.Split(data, "\n")
|
||||||
|
statusMap := make(map[string]struct{})
|
||||||
for _, line := range split {
|
for _, line := range split {
|
||||||
line = strings.TrimSpace(line)
|
line = strings.TrimSpace(line)
|
||||||
if !res.exists {
|
if !res.exists {
|
||||||
@ -69,7 +62,10 @@ func commonParser(domain, data string) (Result, error) {
|
|||||||
res.registar = strings.TrimSpace(strings.TrimPrefix(line, "Registrar:"))
|
res.registar = strings.TrimSpace(strings.TrimPrefix(line, "Registrar:"))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "Status:") {
|
if strings.HasPrefix(line, "Status:") {
|
||||||
res.statusRaw = strings.TrimSpace(strings.TrimPrefix(line, "Status:"))
|
statusMap[strings.Split(strings.TrimSpace(strings.TrimPrefix(line, "Status:")), " ")[0]] = struct{}{}
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(line, "Domain Status:") {
|
||||||
|
statusMap[strings.Split(strings.TrimSpace(strings.TrimPrefix(line, "Domain Status:")), " ")[0]] = struct{}{}
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "Name Server:") {
|
if strings.HasPrefix(line, "Name Server:") {
|
||||||
res.nsServers = append(res.nsServers, strings.TrimSpace(strings.TrimPrefix(line, "Name Server:")))
|
res.nsServers = append(res.nsServers, strings.TrimSpace(strings.TrimPrefix(line, "Name Server:")))
|
||||||
@ -189,6 +185,9 @@ func commonParser(domain, data string) (Result, error) {
|
|||||||
t.Email = strings.TrimSpace(strings.TrimPrefix(line, "Tech Email:"))
|
t.Email = strings.TrimSpace(strings.TrimPrefix(line, "Tech Email:"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for status := range statusMap {
|
||||||
|
res.statusRaw = append(res.statusRaw, status)
|
||||||
|
}
|
||||||
res.registerInfo = r
|
res.registerInfo = r
|
||||||
res.adminInfo = a
|
res.adminInfo = a
|
||||||
res.techInfo = t
|
res.techInfo = t
|
||||||
@ -206,6 +205,7 @@ func dotCNParser(domain, data string) (Result, error) {
|
|||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
res.exists = true
|
res.exists = true
|
||||||
|
statusMap := make(map[string]struct{})
|
||||||
split := strings.Split(data, "\n")
|
split := strings.Split(data, "\n")
|
||||||
for _, line := range split {
|
for _, line := range split {
|
||||||
line = strings.TrimSpace(line)
|
line = strings.TrimSpace(line)
|
||||||
@ -226,7 +226,10 @@ func dotCNParser(domain, data string) (Result, error) {
|
|||||||
res.registar = strings.TrimSpace(strings.TrimPrefix(line, "Sponsoring Registrar:"))
|
res.registar = strings.TrimSpace(strings.TrimPrefix(line, "Sponsoring Registrar:"))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "Status:") {
|
if strings.HasPrefix(line, "Status:") {
|
||||||
res.statusRaw = strings.TrimSpace(strings.TrimPrefix(line, "Status:"))
|
statusMap[strings.Split(strings.TrimSpace(strings.TrimPrefix(line, "Status:")), " ")[0]] = struct{}{}
|
||||||
|
}
|
||||||
|
if strings.HasPrefix(line, "Domain Status:") {
|
||||||
|
statusMap[strings.Split(strings.TrimSpace(strings.TrimPrefix(line, "Domain Status:")), " ")[0]] = struct{}{}
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "Name Server:") {
|
if strings.HasPrefix(line, "Name Server:") {
|
||||||
res.nsServers = append(res.nsServers, strings.TrimSpace(strings.TrimPrefix(line, "Name Server:")))
|
res.nsServers = append(res.nsServers, strings.TrimSpace(strings.TrimPrefix(line, "Name Server:")))
|
||||||
@ -241,6 +244,9 @@ func dotCNParser(domain, data string) (Result, error) {
|
|||||||
r.Email = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Contact Email:"))
|
r.Email = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Contact Email:"))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
for status := range statusMap {
|
||||||
|
res.statusRaw = append(res.statusRaw, status)
|
||||||
|
}
|
||||||
res.registerInfo = r
|
res.registerInfo = r
|
||||||
return res, nil
|
return res, nil
|
||||||
}
|
}
|
||||||
@ -260,6 +266,7 @@ func dotJPParser(domain, data string) (Result, error) {
|
|||||||
}
|
}
|
||||||
line = strings.TrimSpace(line)
|
line = strings.TrimSpace(line)
|
||||||
if strings.HasPrefix(line, "[Domain Name]") {
|
if strings.HasPrefix(line, "[Domain Name]") {
|
||||||
|
res.exists = true
|
||||||
res.nsServers = []string{}
|
res.nsServers = []string{}
|
||||||
res.domain = strings.TrimSpace(strings.TrimPrefix(line, "[Domain Name]"))
|
res.domain = strings.TrimSpace(strings.TrimPrefix(line, "[Domain Name]"))
|
||||||
}
|
}
|
||||||
@ -270,10 +277,10 @@ func dotJPParser(domain, data string) (Result, error) {
|
|||||||
res.nsServers = append(res.nsServers, strings.TrimSpace(strings.TrimPrefix(line, "[Name Server]")))
|
res.nsServers = append(res.nsServers, strings.TrimSpace(strings.TrimPrefix(line, "[Name Server]")))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "[状態]") {
|
if strings.HasPrefix(line, "[状態]") {
|
||||||
res.statusRaw += strings.TrimSpace(strings.TrimPrefix(line, "[状態]"))
|
res.statusRaw = append(res.statusRaw, strings.TrimSpace(strings.TrimPrefix(line, "[状態]")))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "[ロック状態]") {
|
if strings.HasPrefix(line, "[ロック状態]") {
|
||||||
res.statusRaw += strings.TrimSpace(strings.TrimPrefix(line, "[ロック状態]"))
|
res.statusRaw = append(res.statusRaw, strings.TrimSpace(strings.TrimPrefix(line, "[ロック状態]")))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "[登録年月日]") {
|
if strings.HasPrefix(line, "[登録年月日]") {
|
||||||
res.registerDate = parseJPDate(strings.TrimSpace(strings.TrimPrefix(line, "[登録年月日]")), true)
|
res.registerDate = parseJPDate(strings.TrimSpace(strings.TrimPrefix(line, "[登録年月日]")), true)
|
||||||
@ -348,7 +355,7 @@ func dotTWParser(domain, data string) (Result, error) {
|
|||||||
res.expireDate = parseCNDate(strings.TrimSpace(strings.TrimSuffix(strings.TrimPrefix(line, "Record expires on"), "(UTC+8)")))
|
res.expireDate = parseCNDate(strings.TrimSpace(strings.TrimSuffix(strings.TrimPrefix(line, "Record expires on"), "(UTC+8)")))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "Domain Status:") {
|
if strings.HasPrefix(line, "Domain Status:") {
|
||||||
res.statusRaw = strings.TrimSpace(strings.TrimPrefix(line, "Domain Status:"))
|
res.statusRaw = append(res.statusRaw, strings.TrimSpace(strings.TrimPrefix(line, "Domain Status:")))
|
||||||
}
|
}
|
||||||
if strings.HasPrefix(line, "Domain servers in listed order:") {
|
if strings.HasPrefix(line, "Domain servers in listed order:") {
|
||||||
startNs = true
|
startNs = true
|
||||||
|
|||||||
@ -7,5 +7,5 @@ import (
|
|||||||
|
|
||||||
func TestWhois(t *testing.T) {
|
func TestWhois(t *testing.T) {
|
||||||
c := NewClient()
|
c := NewClient()
|
||||||
fmt.Println(c.Whois("b612.com"))
|
fmt.Println(c.Whois("b612.in"))
|
||||||
}
|
}
|
||||||
|
|||||||
127
whois.go
127
whois.go
@ -19,6 +19,60 @@ const (
|
|||||||
asnPrefix = "AS"
|
asnPrefix = "AS"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
StatusAddPeriod = "AddPeriod"
|
||||||
|
StatusAutoRenewPeriod = "AutoRenewPeriod"
|
||||||
|
StatusInActive = "Inactive"
|
||||||
|
StatusOk = "Ok"
|
||||||
|
StatusPendingDelete = "PendingDelete"
|
||||||
|
StatusPendingCreate = "PendingCreate"
|
||||||
|
StatusPendingRenew = "PendingRenew"
|
||||||
|
StatusPendingTransfer = "PendingTransfer"
|
||||||
|
StatusPendingRestore = "PendingRestore"
|
||||||
|
StatusPendingUpdate = "PendingUpdate"
|
||||||
|
StatusRedemptionPeriod = "RedemptionPeriod"
|
||||||
|
StatusRenewPeriod = "RenewPeriod"
|
||||||
|
StatusServerDeleteProhibited = "ServerDeleteProhibited"
|
||||||
|
StatusServerHold = "ServerHold"
|
||||||
|
StatusServerRenewProhibited = "ServerRenewProhibited"
|
||||||
|
StatusServerTransferProhibited = "ServerTransferProhibited"
|
||||||
|
StatusServerUpdateProhibited = "ServerUpdateProhibited"
|
||||||
|
StatusTransferPeriod = "TransferPeriod"
|
||||||
|
StatusClientDeleteProhibited = "ClientDeleteProhibited"
|
||||||
|
StatusClientHold = "ClientHold"
|
||||||
|
StatusClientRenewProhibited = "ClientRenewProhibited"
|
||||||
|
StatusClientTransferProhibited = "ClientTransferProhibited"
|
||||||
|
StatusClientUpdateProhibited = "ClientUpdateProhibited"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
var statusMap = map[string]string{
|
||||||
|
"addPeriod": StatusAddPeriod,
|
||||||
|
"autoRenewPeriod": StatusAutoRenewPeriod,
|
||||||
|
"inactive": StatusInActive,
|
||||||
|
"ok": StatusOk,
|
||||||
|
"pendingDelete": StatusPendingDelete,
|
||||||
|
"pendingCreate": StatusPendingCreate,
|
||||||
|
"pendingRenew": StatusPendingRenew,
|
||||||
|
"pendingTransfer": StatusPendingTransfer,
|
||||||
|
"pendingRestore": StatusPendingRestore,
|
||||||
|
"pendingUpdate": StatusPendingUpdate,
|
||||||
|
"redemptionPeriod": StatusRedemptionPeriod,
|
||||||
|
"renewPeriod": StatusRenewPeriod,
|
||||||
|
"serverDeleteProhibited": StatusServerDeleteProhibited,
|
||||||
|
"serverHold": StatusServerHold,
|
||||||
|
"serverRenewProhibited": StatusServerRenewProhibited,
|
||||||
|
"serverTransferProhibited": StatusServerTransferProhibited,
|
||||||
|
"serverUpdateProhibited": StatusServerUpdateProhibited,
|
||||||
|
"transferPeriod": StatusTransferPeriod,
|
||||||
|
"clientDeleteProhibited": StatusClientDeleteProhibited,
|
||||||
|
"clientHold": StatusClientHold,
|
||||||
|
"clientRenewProhibited": StatusClientRenewProhibited,
|
||||||
|
"clientTransferProhibited": StatusClientTransferProhibited,
|
||||||
|
"clientUpdateProhibited": StatusClientUpdateProhibited,
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
// DefaultClient is default whois client
|
// DefaultClient is default whois client
|
||||||
var DefaultClient = NewClient()
|
var DefaultClient = NewClient()
|
||||||
|
|
||||||
@ -55,7 +109,7 @@ type Result struct {
|
|||||||
registerDate time.Time
|
registerDate time.Time
|
||||||
updateDate time.Time
|
updateDate time.Time
|
||||||
expireDate time.Time
|
expireDate time.Time
|
||||||
statusRaw string
|
statusRaw []string
|
||||||
nsServers []string
|
nsServers []string
|
||||||
dnssec string
|
dnssec string
|
||||||
whoisSer string
|
whoisSer string
|
||||||
@ -65,6 +119,70 @@ type Result struct {
|
|||||||
techInfo PersonalInfo
|
techInfo PersonalInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r Result) Exists() bool {
|
||||||
|
return r.exists
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) Domain() string {
|
||||||
|
return r.domain
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) DomainID() string {
|
||||||
|
return r.domainID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) RawData() string {
|
||||||
|
return r.rawData
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) Registar() string {
|
||||||
|
return r.registar
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) RegisterDate() time.Time {
|
||||||
|
return r.registerDate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) UpdateDate() time.Time {
|
||||||
|
return r.updateDate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) ExpireDate() time.Time {
|
||||||
|
return r.expireDate
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) Status() []string {
|
||||||
|
return r.statusRaw
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) NsServers() []string {
|
||||||
|
return r.nsServers
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) Dnssec() string {
|
||||||
|
return r.dnssec
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) WhoisSer() string {
|
||||||
|
return r.whoisSer
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) IanaID() string {
|
||||||
|
return r.ianaID
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) RegisterInfo() PersonalInfo {
|
||||||
|
return r.registerInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) AdminInfo() PersonalInfo {
|
||||||
|
return r.adminInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
func (r Result) TechInfo() PersonalInfo {
|
||||||
|
return r.techInfo
|
||||||
|
}
|
||||||
|
|
||||||
// NewClient returns new whois client
|
// NewClient returns new whois client
|
||||||
func NewClient() *Client {
|
func NewClient() *Client {
|
||||||
return &Client{
|
return &Client{
|
||||||
@ -75,13 +193,12 @@ func NewClient() *Client {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) Whois(domain string, servers ...string) (string, error) {
|
func (c *Client) Whois(domain string, servers ...string) (Result, error) {
|
||||||
data, err := c.whois(domain)
|
data, err := c.whois(domain)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return data, err
|
return Result{}, err
|
||||||
}
|
}
|
||||||
parse(domain, data)
|
return parse(domain, data)
|
||||||
return "", err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Client) whois(domain string, servers ...string) (result string, err error) {
|
func (c *Client) whois(domain string, servers ...string) (result string, err error) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user