package cmd // import ( // "context" // "fmt" // "io" // "math/rand" // "net/http" // "net/netip" // "time" // "github.com/hiddify/hiddify-core/common" // // "github.com/hiddify/hiddify-core/extension_repository/cleanip_scanner" // "github.com/spf13/cobra" // "golang.org/x/net/proxy" // ) // var commandTemp = &cobra.Command{ // Use: "temp", // Short: "temp", // Args: cobra.MaximumNArgs(2), // Run: func(cmd *cobra.Command, args []string) { // // fmt.Printf("Ping time: %d ms\n", Ping()) // scanner := cleanip_scanner.NewScannerEngine(&cleanip_scanner.ScannerOptions{ // UseIPv4: true, // UseIPv6: common.CanConnectIPv6(), // MaxDesirableRTT: 500 * time.Millisecond, // IPQueueSize: 4, // IPQueueTTL: 10 * time.Second, // ConcurrentPings: 10, // // MaxDesirableIPs: e.count, // CidrList: cleanip_scanner.DefaultCFRanges(), // PingFunc: func(ip netip.Addr) (cleanip_scanner.IPInfo, error) { // fmt.Printf("Ping: %s\n", ip.String()) // return cleanip_scanner.IPInfo{ // AddrPort: netip.AddrPortFrom(ip, 80), // RTT: time.Duration(rand.Intn(1000)), // CreatedAt: time.Now(), // }, nil // }, // }, // ) // ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second) // defer cancel() // scanner.Run(ctx) // t := time.NewTicker(1 * time.Second) // defer t.Stop() // for { // ipList := scanner.GetAvailableIPs(false) // if len(ipList) > 1 { // // e.result = "" // for i := 0; i < 2; i++ { // // result = append(result, ipList[i]) // // e.result = e.result + ipList[i].AddrPort.String() + "\n" // fmt.Printf("%d %s\n", ipList[i].RTT, ipList[i].AddrPort.String()) // } // return // } // select { // case <-ctx.Done(): // // Context is done // return // case <-t.C: // // Prevent the loop from spinning too fast // continue // } // } // }, // } // func init() { // mainCommand.AddCommand(commandTemp) // } // func GetContent(url string) (string, error) { // return ContentFromURL("GET", url, 10*time.Second) // } // func ContentFromURL(method string, url string, timeout time.Duration) (string, error) { // if method == "" { // return "", fmt.Errorf("empty method") // } // if url == "" { // return "", fmt.Errorf("empty url") // } // req, err := http.NewRequest(method, url, nil) // if err != nil { // return "", err // } // dialer, err := proxy.SOCKS5("tcp", "127.0.0.1:12334", nil, proxy.Direct) // if err != nil { // return "", err // } // transport := &http.Transport{ // Dial: dialer.Dial, // } // client := &http.Client{ // Transport: transport, // Timeout: timeout, // } // resp, err := client.Do(req) // if err != nil { // return "", err // } // defer resp.Body.Close() // if resp.StatusCode != http.StatusOK && resp.StatusCode != http.StatusNoContent { // return "", fmt.Errorf("request failed with status code: %d", resp.StatusCode) // } // body, err := io.ReadAll(resp.Body) // if err != nil { // return "", err // } // if body == nil { // return "", fmt.Errorf("empty body") // } // return string(body), nil // } // func Ping() int { // startTime := time.Now() // _, err := ContentFromURL("HEAD", "https://cp.cloudflare.com", 4*time.Second) // if err != nil { // return -1 // } // duration := time.Since(startTime) // return int(duration.Milliseconds()) // }