123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199 |
- package netutils
- import (
- "net"
- "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
- }
- type WhoisIpLookupEntry struct {
- NetRange string
- CIDR string
- NetName string
- NetHandle string
- Parent string
- NetType string
- OriginAS string
- Organization Organization
- RegDate time.Time
- Updated time.Time
- Ref string
- }
- type Organization struct {
- OrgName string
- OrgId string
- Address string
- City string
- StateProv string
- PostalCode string
- Country string
- /*
- RegDate time.Time
- Updated time.Time
- OrgTechHandle string
- OrgTechName string
- OrgTechPhone string
- OrgTechEmail string
- OrgAbuseHandle string
- OrgAbuseName string
- OrgAbusePhone string
- OrgAbuseEmail string
- OrgRoutingHandle string
- OrgRoutingName string
- OrgRoutingPhone string
- OrgRoutingEmail string
- */
- }
- func ParseWhoisIpData(data string) (WhoisIpLookupEntry, error) {
- var entry WhoisIpLookupEntry = WhoisIpLookupEntry{}
- var org Organization = Organization{}
- lines := strings.Split(data, "\n")
- for _, line := range lines {
- line = strings.TrimSpace(line)
- if strings.HasPrefix(line, "NetRange:") {
- entry.NetRange = strings.TrimSpace(strings.TrimPrefix(line, "NetRange:"))
- } else if strings.HasPrefix(line, "CIDR:") {
- entry.CIDR = strings.TrimSpace(strings.TrimPrefix(line, "CIDR:"))
- } else if strings.HasPrefix(line, "NetName:") {
- entry.NetName = strings.TrimSpace(strings.TrimPrefix(line, "NetName:"))
- } else if strings.HasPrefix(line, "NetHandle:") {
- entry.NetHandle = strings.TrimSpace(strings.TrimPrefix(line, "NetHandle:"))
- } else if strings.HasPrefix(line, "Parent:") {
- entry.Parent = strings.TrimSpace(strings.TrimPrefix(line, "Parent:"))
- } else if strings.HasPrefix(line, "NetType:") {
- entry.NetType = strings.TrimSpace(strings.TrimPrefix(line, "NetType:"))
- } else if strings.HasPrefix(line, "OriginAS:") {
- entry.OriginAS = strings.TrimSpace(strings.TrimPrefix(line, "OriginAS:"))
- } else if strings.HasPrefix(line, "Organization:") {
- org.OrgName = strings.TrimSpace(strings.TrimPrefix(line, "Organization:"))
- } else if strings.HasPrefix(line, "OrgId:") {
- org.OrgId = strings.TrimSpace(strings.TrimPrefix(line, "OrgId:"))
- } else if strings.HasPrefix(line, "Address:") {
- org.Address = strings.TrimSpace(strings.TrimPrefix(line, "Address:"))
- } else if strings.HasPrefix(line, "City:") {
- org.City = strings.TrimSpace(strings.TrimPrefix(line, "City:"))
- } else if strings.HasPrefix(line, "StateProv:") {
- org.StateProv = strings.TrimSpace(strings.TrimPrefix(line, "StateProv:"))
- } else if strings.HasPrefix(line, "PostalCode:") {
- org.PostalCode = strings.TrimSpace(strings.TrimPrefix(line, "PostalCode:"))
- } else if strings.HasPrefix(line, "Country:") {
- org.Country = strings.TrimSpace(strings.TrimPrefix(line, "Country:"))
- } else if strings.HasPrefix(line, "RegDate:") {
- entry.RegDate, _ = parseDate(strings.TrimSpace(strings.TrimPrefix(line, "RegDate:")))
- } else if strings.HasPrefix(line, "Updated:") {
- entry.Updated, _ = parseDate(strings.TrimSpace(strings.TrimPrefix(line, "Updated:")))
- } else if strings.HasPrefix(line, "Ref:") {
- entry.Ref = strings.TrimSpace(strings.TrimPrefix(line, "Ref:"))
- }
- }
- entry.Organization = org
- return entry, nil
- }
- func parseDate(dateStr string) (time.Time, error) {
- dateLayout := "2006-01-02"
- date, err := time.Parse(dateLayout, strings.TrimSpace(dateStr))
- if err != nil {
- return time.Time{}, err
- }
- return date, nil
- }
- func isDomainName(input string) bool {
- ip := net.ParseIP(input)
- if ip != nil {
- // Check if it's IPv4 or IPv6
- if ip.To4() != nil {
- return false
- } else if ip.To16() != nil {
- return false
- }
- }
- _, err := net.LookupHost(input)
- return err == nil
- }
|