发布时间:2024-12-23 00:41:34
下面是使用net.Dial进行端口测试的示例代码:
```go package main import ( "fmt" "net" ) func main() { host := "example.com" port := "80" conn, err := net.Dial("tcp", host+":"+port) if err != nil { fmt.Printf("Port %s on host %s is closed.\n", port, host) return } defer conn.Close() fmt.Printf("Port %s on host %s is open.\n", port, host) } ``` 在上述示例中,我们尝试连接主机"example.com"的80端口。如果端口是开放的,conn连接将成功建立,相应的信息将被输出。否则,将输出该端口是关闭的。下面是使用net.DialTimeout进行端口测试的优化示例代码:
```go package main import ( "context" "fmt" "net" "time" ) func main() { host := "example.com" port := "80" timeout := time.Second * 5 ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() conn, err := net.DialTimeout("tcp", host+":"+port, timeout) if err != nil { fmt.Printf("Port %s on host %s is closed or timeout.\n", port, host) return } defer conn.Close() fmt.Printf("Port %s on host %s is open.\n", port, host) } ``` 在上述示例中,我们使用context.WithTimeout创建一个超时上下文,并将其与net.DialTimeout函数一起使用。如果在指定的超时时间内连接未成功建立,将输出相应的信息。下面是使用portscanner进行端口测试的示例代码:
```go package main import ( "fmt" "github.com/anvie/port-scanner" ) func main() { ps := portscanner.NewPortScanner("localhost", 1*time.Second) openedPorts := ps.GetOpenedPort(20, 3000) for _, port := range openedPorts { fmt.Printf("Port %d is open.\n", port) } } ``` 在上述示例中,我们使用portscanner.NewPortScanner创建一个新的扫描器,然后使用ps.GetOpenedPort函数来获取指定范围内的开放端口。 Conclusion 通过使用Golang的net包、context包与第三方库,我们可以轻松地测试一个主机上的端口是否可用。无论是对于网络服务开发还是网络编程,这一技术都非常有用。希望本文能够帮助你更好地使用Golang来测试端口是否通。