whois.go 3.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package netutils
  2. import (
  3. "strings"
  4. "time"
  5. )
  6. type WHOISResult struct {
  7. DomainName string `json:"domainName"`
  8. RegistryDomainID string `json:"registryDomainID"`
  9. Registrar string `json:"registrar"`
  10. UpdatedDate time.Time `json:"updatedDate"`
  11. CreationDate time.Time `json:"creationDate"`
  12. ExpiryDate time.Time `json:"expiryDate"`
  13. RegistrantID string `json:"registrantID"`
  14. RegistrantName string `json:"registrantName"`
  15. RegistrantEmail string `json:"registrantEmail"`
  16. AdminID string `json:"adminID"`
  17. AdminName string `json:"adminName"`
  18. AdminEmail string `json:"adminEmail"`
  19. TechID string `json:"techID"`
  20. TechName string `json:"techName"`
  21. TechEmail string `json:"techEmail"`
  22. NameServers []string `json:"nameServers"`
  23. DNSSEC string `json:"dnssec"`
  24. }
  25. func ParseWHOISResponse(response string) (WHOISResult, error) {
  26. result := WHOISResult{}
  27. lines := strings.Split(response, "\n")
  28. for _, line := range lines {
  29. line = strings.TrimSpace(line)
  30. if strings.HasPrefix(line, "Domain Name:") {
  31. result.DomainName = strings.TrimSpace(strings.TrimPrefix(line, "Domain Name:"))
  32. } else if strings.HasPrefix(line, "Registry Domain ID:") {
  33. result.RegistryDomainID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Domain ID:"))
  34. } else if strings.HasPrefix(line, "Registrar:") {
  35. result.Registrar = strings.TrimSpace(strings.TrimPrefix(line, "Registrar:"))
  36. } else if strings.HasPrefix(line, "Updated Date:") {
  37. dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Updated Date:"))
  38. updatedDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr)
  39. if err == nil {
  40. result.UpdatedDate = updatedDate
  41. }
  42. } else if strings.HasPrefix(line, "Creation Date:") {
  43. dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Creation Date:"))
  44. creationDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr)
  45. if err == nil {
  46. result.CreationDate = creationDate
  47. }
  48. } else if strings.HasPrefix(line, "Registry Expiry Date:") {
  49. dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Registry Expiry Date:"))
  50. expiryDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr)
  51. if err == nil {
  52. result.ExpiryDate = expiryDate
  53. }
  54. } else if strings.HasPrefix(line, "Registry Registrant ID:") {
  55. result.RegistrantID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Registrant ID:"))
  56. } else if strings.HasPrefix(line, "Registrant Name:") {
  57. result.RegistrantName = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Name:"))
  58. } else if strings.HasPrefix(line, "Registrant Email:") {
  59. result.RegistrantEmail = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Email:"))
  60. } else if strings.HasPrefix(line, "Registry Admin ID:") {
  61. result.AdminID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Admin ID:"))
  62. } else if strings.HasPrefix(line, "Admin Name:") {
  63. result.AdminName = strings.TrimSpace(strings.TrimPrefix(line, "Admin Name:"))
  64. } else if strings.HasPrefix(line, "Admin Email:") {
  65. result.AdminEmail = strings.TrimSpace(strings.TrimPrefix(line, "Admin Email:"))
  66. } else if strings.HasPrefix(line, "Registry Tech ID:") {
  67. result.TechID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Tech ID:"))
  68. } else if strings.HasPrefix(line, "Tech Name:") {
  69. result.TechName = strings.TrimSpace(strings.TrimPrefix(line, "Tech Name:"))
  70. } else if strings.HasPrefix(line, "Tech Email:") {
  71. result.TechEmail = strings.TrimSpace(strings.TrimPrefix(line, "Tech Email:"))
  72. } else if strings.HasPrefix(line, "Name Server:") {
  73. ns := strings.TrimSpace(strings.TrimPrefix(line, "Name Server:"))
  74. result.NameServers = append(result.NameServers, ns)
  75. } else if strings.HasPrefix(line, "DNSSEC:") {
  76. result.DNSSEC = strings.TrimSpace(strings.TrimPrefix(line, "DNSSEC:"))
  77. }
  78. }
  79. return result, nil
  80. }