package netutils import ( "strings" "time" ) type WHOISResult struct { DomainName string `json:"domainName"` RegistryDomainID string `json:"registryDomainID"` Registrar string `json:"registrar"` UpdatedDate time.Time `json:"updatedDate"` CreationDate time.Time `json:"creationDate"` ExpiryDate time.Time `json:"expiryDate"` RegistrantID string `json:"registrantID"` RegistrantName string `json:"registrantName"` RegistrantEmail string `json:"registrantEmail"` AdminID string `json:"adminID"` AdminName string `json:"adminName"` AdminEmail string `json:"adminEmail"` TechID string `json:"techID"` TechName string `json:"techName"` TechEmail string `json:"techEmail"` NameServers []string `json:"nameServers"` DNSSEC string `json:"dnssec"` } func ParseWHOISResponse(response string) (WHOISResult, error) { result := WHOISResult{} lines := strings.Split(response, "\n") for _, line := range lines { line = strings.TrimSpace(line) if strings.HasPrefix(line, "Domain Name:") { result.DomainName = strings.TrimSpace(strings.TrimPrefix(line, "Domain Name:")) } else if strings.HasPrefix(line, "Registry Domain ID:") { result.RegistryDomainID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Domain ID:")) } else if strings.HasPrefix(line, "Registrar:") { result.Registrar = strings.TrimSpace(strings.TrimPrefix(line, "Registrar:")) } else if strings.HasPrefix(line, "Updated Date:") { dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Updated Date:")) updatedDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr) if err == nil { result.UpdatedDate = updatedDate } } else if strings.HasPrefix(line, "Creation Date:") { dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Creation Date:")) creationDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr) if err == nil { result.CreationDate = creationDate } } else if strings.HasPrefix(line, "Registry Expiry Date:") { dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Registry Expiry Date:")) expiryDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr) if err == nil { result.ExpiryDate = expiryDate } } else if strings.HasPrefix(line, "Registry Registrant ID:") { result.RegistrantID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Registrant ID:")) } else if strings.HasPrefix(line, "Registrant Name:") { result.RegistrantName = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Name:")) } else if strings.HasPrefix(line, "Registrant Email:") { result.RegistrantEmail = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Email:")) } else if strings.HasPrefix(line, "Registry Admin ID:") { result.AdminID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Admin ID:")) } else if strings.HasPrefix(line, "Admin Name:") { result.AdminName = strings.TrimSpace(strings.TrimPrefix(line, "Admin Name:")) } else if strings.HasPrefix(line, "Admin Email:") { result.AdminEmail = strings.TrimSpace(strings.TrimPrefix(line, "Admin Email:")) } else if strings.HasPrefix(line, "Registry Tech ID:") { result.TechID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Tech ID:")) } else if strings.HasPrefix(line, "Tech Name:") { result.TechName = strings.TrimSpace(strings.TrimPrefix(line, "Tech Name:")) } else if strings.HasPrefix(line, "Tech Email:") { result.TechEmail = strings.TrimSpace(strings.TrimPrefix(line, "Tech Email:")) } else if strings.HasPrefix(line, "Name Server:") { ns := strings.TrimSpace(strings.TrimPrefix(line, "Name Server:")) result.NameServers = append(result.NameServers, ns) } else if strings.HasPrefix(line, "DNSSEC:") { result.DNSSEC = strings.TrimSpace(strings.TrimPrefix(line, "DNSSEC:")) } } return result, nil }