要通过 Go 的 netlink
库获取网络接口的 IP 状态,你可以使用 netlink.AddrList()
函数来列出某个网络接口的所有 IP 地址。以下是一个简单的示例,演示如何获取和打印指定接口的 IP 地址及其状态:
示例代码
package main
import (
"fmt"
"log"
"github.com/vishvananda/netlink"
)
func main() {
ifName := "eth0" // 替换为你的网络接口名
// 获取网络接口
link, err := netlink.LinkByName(ifName)
if err != nil {
log.Fatalf("Error getting link: %v", err)
}
// 获取该接口的所有地址
addrs, err := netlink.AddrList(link, netlink.FAMILY_ALL)
if err != nil {
log.Fatalf("Error getting addresses: %v", err)
}
fmt.Printf("IP addresses for interface %s:\n", ifName)
for _, addr := range addrs {
fmt.Printf("- %s\n", addr.IP.String())
}
// 检查链接状态
if link.Flags&netlink.FlagUp != 0 {
fmt.Printf("Interface %s is UP\n", ifName)
} else {
fmt.Printf("Interface %s is DOWN\n", ifName)
}
}
代码说明
导入必要的包:确保你导入了
github.com/vishvananda/netlink
。获取网络接口:使用
netlink.LinkByName()
来获取指定名称的网络接口。获取地址列表:使用
netlink.AddrList()
方法并传递FAMILY_ALL
来获取该接口上配置的所有 IP 地址(包括 IPv4 和 IPv6)。输出 IP 地址:遍历返回的地址并打印出来。
检查链接状态:通过检查链接的标志位(如
FlagUp
)来判断网络接口是否处于“UP”状态。
注意事项
- 确保你有适当的权限运行这个程序(可能需要 root 权限)。
- 将
"eth0"
替换为你实际要查询的网络接口名称。 - 根据具体需求进行错误处理和功能扩展。
内容由零声教学AI助手提供,问题来源于学员提问