2017-12-04 25 views
-4

サーバー側のServeDHCPによって処理される偽のudp(ランダムなMACアドレス、つまり01:ff:ff:ff:ff:ff)パッケージを送信しようとしています。 、以下のdhcpv4 githubリポジトリgithub.com/krolaw/dhcp4を実行しています。golangで偽のudpパッケージを送信する方法

検出パッケージを送信する目的は、dhcpが有効かどうかを確認することです。

実際に私は新しいFUNCを作成したが、チェック機能のメインで

func (h *DHCPHandler) check() { 
    con, err = net.Dial("udp", "127.0.0.1:67") 
    for { 
      //fake udp package??? 
      time.Sleep(10 * time.Minute) 
    } 

}

と呼ばれ、私は次の呼び出しgo handler.check()

を持ってServeDHCPに私はこれらを渡す必要がありますパラメータ:
func (h *DHCPHandler) ServeDHCP(p dhcp.Packet, msgType dhcp.MessageType, options dhcp.Options)

funcチェックから偽のupdパッケージを送信するにはどうすればよいですか?

+0

を11minするためにそれをsettedされますどのようなI "偽のUDPパッケージ"ですか?専門家ではありませんが、AFAIKにはUDPに「パッケージ」というものはありません。また、「偽」とはどういう意味ですか?それは本当にTCPですか?あなたはあなたの問題を解決するかもしれないと思う方法ではなく、実際にあなたの*目標*が何であるかを記述するべきです。 – Carpetsmoker

答えて

0

最終的に私はこのチェックを10分の時間に送信するように管理しました。私が知っているMacアドレスを持つupdパッケージは、決して以下のようには届かないでしょう。主な機能には

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) 
    } 

}

、私は、このチェックゴルーチンを呼び出し、サーバ側(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にチェックが

[Service] 
ExecStartPre=//something 
WatchdogSec=11min 
Restart=on-failure 
関連する問題