123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package ops
- import (
- "crypto/tls"
- "net"
- "regexp"
- "strings"
- "time"
- )
- // 域名信息
- type DomainMsg struct {
- CreateDate string `json:"create_date"`
- ExpiryDate string `json:"expiry_date"`
- Registrar string `json:"registrar"`
- }
- // GetDomainMsg 获取域名信息
- func GetDomainMsg(domain string) (dm DomainMsg, err error) {
- var conn net.Conn
- conn, err = net.Dial("tcp", "whois.verisign-grs.com:43")
- if err != nil {
- return
- }
- defer conn.Close()
- _, err = conn.Write([]byte(domain + "\r\n"))
- if err != nil {
- return
- }
- buf := make([]byte, 1024)
- var num int
- num, err = conn.Read(buf)
- if err != nil {
- return
- }
- response := string(buf[:num])
- re := regexp.MustCompile(`Creation Date: (.*)\n.*Expiry Date: (.*)\n.*Registrar: (.*)`)
- match := re.FindStringSubmatch(response)
- if len(match) > 3 {
- dm.CreateDate = strings.TrimSpace(strings.Split(match[1], "Creation Date:")[0])
- dm.ExpiryDate = strings.TrimSpace(strings.Split(match[2], "Expiry Date:")[0])
- dm.Registrar = strings.TrimSpace(strings.Split(match[3], "Registrar:")[0])
- }
- return
- }
- // GetDomainCertMsg 获取域名证书信息
- func GetDomainCertMsg(domain string) (cm tls.ConnectionState, err error) {
- var conn net.Conn
- conn, err = net.DialTimeout("tcp", domain+":443", time.Second*10)
- if err != nil {
- return
- }
- defer conn.Close()
- tlsConn := tls.Client(conn, &tls.Config{
- ServerName: domain,
- })
- defer tlsConn.Close()
- err = tlsConn.Handshake()
- if err != nil {
- return
- }
- cm = tlsConn.ConnectionState()
- return
- }
|