whois.go 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. if strings.HasPrefix(line, "Domain Name:") {
  30. result.DomainName = strings.TrimSpace(strings.TrimPrefix(line, "Domain Name:"))
  31. } else if strings.HasPrefix(line, "Registry Domain ID:") {
  32. result.RegistryDomainID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Domain ID:"))
  33. } else if strings.HasPrefix(line, "Registrar:") {
  34. result.Registrar = strings.TrimSpace(strings.TrimPrefix(line, "Registrar:"))
  35. } else if strings.HasPrefix(line, "Updated Date:") {
  36. dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Updated Date:"))
  37. updatedDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr)
  38. if err == nil {
  39. result.UpdatedDate = updatedDate
  40. }
  41. } else if strings.HasPrefix(line, "Creation Date:") {
  42. dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Creation Date:"))
  43. creationDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr)
  44. if err == nil {
  45. result.CreationDate = creationDate
  46. }
  47. } else if strings.HasPrefix(line, "Registry Expiry Date:") {
  48. dateStr := strings.TrimSpace(strings.TrimPrefix(line, "Registry Expiry Date:"))
  49. expiryDate, err := time.Parse("2006-01-02T15:04:05Z", dateStr)
  50. if err == nil {
  51. result.ExpiryDate = expiryDate
  52. }
  53. } else if strings.HasPrefix(line, "Registry Registrant ID:") {
  54. result.RegistrantID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Registrant ID:"))
  55. } else if strings.HasPrefix(line, "Registrant Name:") {
  56. result.RegistrantName = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Name:"))
  57. } else if strings.HasPrefix(line, "Registrant Email:") {
  58. result.RegistrantEmail = strings.TrimSpace(strings.TrimPrefix(line, "Registrant Email:"))
  59. } else if strings.HasPrefix(line, "Registry Admin ID:") {
  60. result.AdminID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Admin ID:"))
  61. } else if strings.HasPrefix(line, "Admin Name:") {
  62. result.AdminName = strings.TrimSpace(strings.TrimPrefix(line, "Admin Name:"))
  63. } else if strings.HasPrefix(line, "Admin Email:") {
  64. result.AdminEmail = strings.TrimSpace(strings.TrimPrefix(line, "Admin Email:"))
  65. } else if strings.HasPrefix(line, "Registry Tech ID:") {
  66. result.TechID = strings.TrimSpace(strings.TrimPrefix(line, "Registry Tech ID:"))
  67. } else if strings.HasPrefix(line, "Tech Name:") {
  68. result.TechName = strings.TrimSpace(strings.TrimPrefix(line, "Tech Name:"))
  69. } else if strings.HasPrefix(line, "Tech Email:") {
  70. result.TechEmail = strings.TrimSpace(strings.TrimPrefix(line, "Tech Email:"))
  71. } else if strings.HasPrefix(line, "Name Server:") {
  72. ns := strings.TrimSpace(strings.TrimPrefix(line, "Name Server:"))
  73. result.NameServers = append(result.NameServers, ns)
  74. } else if strings.HasPrefix(line, "DNSSEC:") {
  75. result.DNSSEC = strings.TrimSpace(strings.TrimPrefix(line, "DNSSEC:"))
  76. }
  77. }
  78. return result, nil
  79. }