我可以使用什么系统调用/方法来获取默认网络网关

nba*_*ari 5 networking system-calls go

使用Go what 包、本地函数、系统调用可用于获取*nix 系统上的默认网关

我想避免创建包装器 arround netstat、路由、 ip 等命令,或读取、解析现有文件,其想法是获取最可能的操作系统/平台不可知方式的值。

例如,这是route命令的输出:

$ route -n get default
   route to: default
destination: default
       mask: default
    gateway: 192.168.1.1
  interface: en1
      flags: <UP,GATEWAY,DONE,STATIC,PRCLONING>
 recvpipe  sendpipe  ssthresh  rtt,msec    rttvar  hopcount      mtu     expire
       0         0         0         0         0         0      1500         0
Run Code Online (Sandbox Code Playgroud)

我想做一些类似的事情,以便只打印/获取网关地址/接口。

Cas*_*sey -4

使用https://github.com/golang/net/blob/master/internal/nettest/interface.go上的 RoutedInterface() 代码

示例代码片段:

rifs := nettest.RoutedInterface("ip", net.FlagUp | net.FlagBroadcast)
if rifs != nil {
    fmt.Println("Routed interface is ",rifs.HardwareAddr.String())
    fmt.Println("Flags are", rifs.Flags.String())
}
Run Code Online (Sandbox Code Playgroud)

注意:您需要将 golang 代码复制到本地库中,因为不允许直接调用 /internal 。

  • 不知道为什么这被接受,因为问题询问的是网关 IP。如果您查看 interface.go 链接,您会发现该代码对网关没有任何作用;它只是检查本地接口上的地址并返回它满意的地址。 (3认同)