我试图发送一个伪udp(一个随机的mac地址,假设01:ff:ff:ff:ff:ff)包由服务器端的ServeDHCP处理,我正在运行以下dhcpv4 github存储库{ {3}}。
发送发现包的目的是检查dhcp是否存活。
实际上我创建了一个名为check
的新函数<div class="input-field col s12">
<select className="browser-default">
<option value="" disabled selected>Choose your option</option>
<option value="1">Option 1</option>
<option value="2">Option 2</option>
<option value="3">Option 3</option>
</select>
<label>Materialize Select</label>
</div>
}
在函数的主要部分,我有以下调用func (h *DHCPHandler) check () {
con, err = net.Dial("udp", "127.0.0.1:67")
for {
//fake udp package???
time.Sleep(10 * time.Minute)
}
在ServeDHCP中我应该传递这些参数:
go handler.check()
我如何从func检查中发送假冒更新包?
答案 0 :(得分:0)
最后我设法做了这项检查,以10分钟的时间发送一个包含mac地址的更新包,我知道永远不会达到如下。
func (h *DHCPHandler) check() {
//Fetch parameters from config file
config := getConfig() // here is a mac saved on a json file 01:ff:ff:ff:ff:ff
macFake, err := net.ParseMAC(config.MacFake)
if err != nil {
fmt.Println("error with the fake mac provided on the json file", err)
}
// create connection
conn, err := net.Dial("udp4", "127.0.0.1:67")
if err != nil {
fmt.Println("error with the connection", err)
}
//stay alive
for {
fmt.Fprintf(conn, "GET / HTTP/1.0\r\n\r\n")
conn.Write(dhcp.RequestPacket(dhcp.Discover, macFake, h.ip, []byte{0, 1, 2, 3}, true, nil))
time.Sleep(10 * time.Minute)
}
}
在main函数上,我只需要调用此检查goroutine并在服务器端添加(ServeDHCP)此代码:
mac := p.CHAddr().String()
//Fetch parameters from config file
config := getConfig()
if mac == config.MacFake { //udp package received and a mac saved on a json file 01:ff:ff:ff:ff:ff
// send notification to restart if failure on a systemd
daemon.SdNotify(false, "WATCHDOG=1")
return
}
最后一部分需要添加一个systemd检查,在我的情况下我每隔10分钟发送一次看门狗,因此,systemd检查将被设置为11分钟
[Service]
ExecStartPre=//something
WatchdogSec=11min
Restart=on-failure