要在Go语言中监控网口状态变化,可以使用netlink包来实现。以下是一个简单的示例代码:
package main
import (
"fmt"
"github.com/vishvananda/netlink"
)
func main() {
// 获取所有网络接口信息
interfaces, err := netlink.LinkList()
if err != nil {
fmt.Println("获取网络接口失败:", err)
return
}
for _, iface := range interfaces {
linkAttrs := iface.Attrs()
// 监听网络接口状态变化
ch := make(chan netlink.LinkUpdate)
done := make(chan struct{})
err = netlink.LinkSubscribe(ch, done)
if err != nil {
fmt.Println("监听网络接口失败:", err)
return
}
go func() {
defer close(done)
for update := range ch {
if update.Link.Attrs().Index == linkAttrs.Index { // 监听指定的网卡
fmt.Printf("网卡%s状态变化: %s\n", linkAttrs.Name, update.Link.Attrs().OperState.String())
}
}
}()
// 做其他操作...
// 关闭监听通道和连接
close(ch)
<-done
}
}
这段代码会遍历系统中的每个网络接口,并使用LinkSubscribe方法监听指定网卡的状态变化。当状态发生变化时,将打印出网卡名称和当前状态。
请注意,该代码需要在管理员权限下运行,因为它涉及到对网络接口进行读取和订阅的操作。另外,你可能需要先安装github.com/vishvananda/netlink包,可以使用以下命令进行安装:
go get github.com/vishvananda/netlink
希望对你有所帮助!
内容由零声教学AI助手提供,问题来源于学员提问




