在Go语言中,可以使用net包来实现根据IP、网关和接口掩码添加主机路由。下面是一个示例代码:
package main
import (
"fmt"
"net"
"os"
)
func main() {
ip := net.ParseIP("192.168.0.100")
mask := net.CIDRMask(24, 32)
gw := net.ParseIP("192.168.0.1")
iface, err := net.InterfaceByName("eth0")
if err != nil {
fmt.Println("Failed to get interface:", err)
os.Exit(1)
}
err = addRoute(ip, mask, gw, iface)
if err != nil {
fmt.Println("Failed to add route:", err)
} else {
fmt.Println("Route added successfully.")
}
}
func addRoute(ip net.IP, mask net.IPMask, gw net.IP, iface *net.Interface) error {
route := &net.Route{
Destination: &net.IPNet{
IP: ip,
Mask: mask,
},
Gateway: gw,
LinkIndex: iface.Index,
// 使用 LinkLocalUnicast 表示本地链路地址
// 使用 LinkLocalMulticast 表示组播地址
// 使用 Unicast 表示单播地址
// 具体根据情况调整参数值
Scope: net.FlagLinkLocalUnicast,
}
err := netlink.RouteAdd(route)
return err
}
上述代码中,我们通过net.ParseIP()函数解析目标IP地址、网关地址,并使用net.CIDRMask()函数生成子网掩码。然后使用net.InterfaceByName()函数获取指定的网络接口(例如eth0),如果获取失败则会打印错误并退出。
最后,我们通过调用addRoute()函数来添加主机路由。该函数中使用了netlink.RouteAdd()方法来实际添加路由条目。在示例代码中,我将 Scope 设置为 LinkLocalUnicast,你可以根据需要调整为其他适当的值。
请注意,在运行此代码之前,请确保具有足够的权限(例如以管理员或root身份运行)以执行操作系统级别的路由更改。另外,这只是一个简单的示例,实际应用中可能还需要进行错误处理和其他检查。
内容由零声教学AI助手提供,问题来源于学员提问




