package whois import ( "b612.me/starlog" "b612.me/staros" "github.com/likexian/whois" "github.com/spf13/cobra" "golang.org/x/net/proxy" "os" "strings" "time" ) var timeout int var output string var whoisServer []string var socks5 string var socks5Auth string func init() { Cmd.Flags().IntVarP(&timeout, "timeout", "t", 20, "超时时间") Cmd.Flags().StringVarP(&output, "output", "o", "", "输出文件夹") Cmd.Flags().StringSliceVarP(&whoisServer, "server", "s", nil, "whois服务器") Cmd.Flags().StringVarP(&socks5, "socks5", "p", "", "socks5代理,示例:127.0.0.1:1080") Cmd.Flags().StringVarP(&socks5Auth, "socks5-auth", "A", "", "socks5代理认证,示例:username:password") } var Cmd = &cobra.Command{ Use: "whois", Short: "whois查询", Long: "whois查询", Run: func(cmd *cobra.Command, args []string) { if len(args) == 0 { cmd.Help() return } if !staros.Exists(output) { cmd.Println("输出文件夹不存在,将使用标准输出") output = "" } c := whois.NewClient() if socks5 != "" { var auth *proxy.Auth if socks5Auth != "" { up := strings.SplitN(socks5Auth, ":", 2) if len(up) == 2 { auth = &proxy.Auth{ User: up[0], Password: up[1], } } else { starlog.Errorln("socks5认证格式错误") return } } s5Dial, err := proxy.SOCKS5("tcp", socks5, auth, proxy.Direct) if err == nil { c.SetDialer(s5Dial) } else { starlog.Errorln("socks5代理错误:", err) return } } c.SetTimeout(time.Second * time.Duration(timeout)) for _, v := range args { data, err := c.Whois(v, whoisServer...) cmd.Println("Query:", v) if err != nil { cmd.Println("查询失败:", err) cmd.Println("-----------------------------------------------------") continue } cmd.Println(data) cmd.Println("-----------------------------------------------------") os.WriteFile(output+"/"+v+".txt", []byte(data), 0644) } }, }