如何在golang中发送假的udp包

时间:2017-12-04 12:34:42

标签: go udp dhcp

我试图发送一个伪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检查中发送假冒更新包?

1 个答案:

答案 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