如何在 golang 或一般情况下查找进程正在使用的端口?

Ail*_*ila 3 shell port pid go

我的二进制文件采用端口参数并启动 http 服务器。如果将 0 传递给 -port,它将找到一个空闲端口并在其上启动。

之后,如果我有命令对象并且可以获取进程ID,我如何找到这是哪个端口?我正在尝试用 golang 编写我的应用程序。我也很好奇这通常是如何完成的。

Dav*_*rth 5

这是特定于操作系统的,但在 Linux 上你可以这样做

netstat -npl

这将列出哪些程序正在侦听哪些端口

如果您只想从应用程序中打印出来,您可以使用另一种形式,通过创建自己的 tcp 侦听器来启动 http 服务器,然后调用 http.Serve

例子:

package main

import (
    "fmt"
    "net"
    "net/http"
    "os"
)

func main() {
    lsnr, err := net.Listen("tcp", ":0")
    if err != nil {
        fmt.Println("Error listening:", err)
        os.Exit(1)
    }
    fmt.Println("Listening on:", lsnr.Addr())
    err = http.Serve(lsnr, nil)
    fmt.Println("Server exited with:", err)
    os.Exit(1)
}
Run Code Online (Sandbox Code Playgroud)

输出:

Listening on: [::]:53939
Run Code Online (Sandbox Code Playgroud)