使用 krolaw/dhcp4 库获取 DHCP 服务器 IPv4 和 IPv6 地址
以下是一个示例程序,使用 krolaw/dhcp4 库获取客户端的 IPv4 和 IPv6 地址:
package main
import (
"fmt"
"net"
"github.com/krolaw/dhcp4"
)
func main() {
// 客户端地址和网卡名
clientAddr := net.ParseIP('192.168.1.100')
clientHwAddr, _ := net.ParseMAC('00:11:22:33:44:55')
// DHCP 请求
requestPacket, err := dhcp4.NewRequestPacket(dhcp4.BootRequest)
if err != nil {
fmt.Println('Failed to create DHCP request packet:', err)
return
}
requestPacket.AddOption(dhcp4.OptParameterRequestList,
[]byte{dhcp4.OptionIPAddressLeaseTime, dhcp4.OptionRouter, dhcp4.OptionDNS, dhcp4.OptionDomainNameServer})
requestPacket.AddOption(dhcp4.OptDHCPMessage, []byte{byte(dhcp4.DHCPDiscover)})
requestPacket.AddOption(dhcp4.OptClientIdentifier, clientHwAddr)
requestPacket.AddOption(dhcp4.OptRequestedIPAddress, clientAddr)
// 发送 DHCP 请求并等待响应
responsePacket, err := dhcp4.SendRequestPacket(requestPacket, 'udp4', '255.255.255.255:67', '255.255.255.255:68', 5*time.Second)
if err != nil {
fmt.Println('Failed to send DHCP request:', err)
return
}
// 解析响应
leaseTime, _ := responsePacket.GetOptionValue(dhcp4.OptionIPAddressLeaseTime)
routerIPs, _ := responsePacket.GetOptionValue(dhcp4.OptionRouter)
dnsIPs, _ := responsePacket.GetOptionValue(dhcp4.OptionDNS)
domainNameServers, _ := responsePacket.GetOptionValue(dhcp4.OptionDomainNameServer)
// 输出 IPv4 地址和 IPv6 地址
fmt.Println('IPv4 address:', clientAddr)
if len(routerIPs) > 0 {
fmt.Println('IPv6 address:', net.ParseIP(string(routerIPs)))
}
}
**注意:**这个示例程序只能获取 IPv6 地址,如果服务器没有配置 IPv6 地址,将无法获取。
原文地址: https://www.cveoy.top/t/topic/fWWt 著作权归作者所有。请勿转载和采集!