2017-12-04 18 views
-4

서버 쪽의 ServeDHCP에서 처리 할 수있는 가짜 udp (임의의 mac 주소, 01 : ff : ff : ff : ff : ff) 패키지를 보내려고합니다. , 다음 dhcpv4 github 저장소 github.com/krolaw/dhcp4을 실행하고 있습니다.골란에서 가짜 udp 패키지를 보내는 방법

발견 패키지를 보내는 목적은 dhcp가 활성 상태인지 확인하는 것입니다.

은 사실 나는 함수의 주요 체크인

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

}

라는 새로운 FUNC, 나는 다음과 같은 호출을 go handler.check()

을 그리고 ServeDHCP에 나는이를 통과해야 만들어 매개 변수 :
func (h *DHCPHandler) ServeDHCP(p dhcp.Packet, msgType dhcp.MessageType, options dhcp.Options)

func 검사에서 어떻게 가짜 업데이트 패키지를 보낼 수 있습니까?

+0

"가짜 UDP 패키지"? 전문가는 아니지만 AFAIK에는 UDP에 "패키지"와 같은 것이 없습니다. 또한 "가짜"는 무엇을 의미합니까? 그것은 정말로 TCP입니까? 당신은 당신의 문제를 해결할 수 있다고 생각하는 방법보다는 당신의 목표 *가 무엇인지를 설명해야합니다. – Carpetsmoker

답변

0

결국이 수표를 10 분 동안 보낼 수있게되었습니다. 내가 알고있는 맥 주소를 가진 upd 패키지는 다음과 같이 도달하지 않을 것입니다.

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 
    } 

필요한 마지막 부분이다 :

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

} 주요 기능에

, 난 그냥이 체크 goroutine를 호출하고 서버 측 (ServeDHCP)이 코드를 추가해야 내 시스템에서는 10 분마다 워치 독을 보내므로 시스템 체크는 11 분으로 설정됩니다.

[Service] 
ExecStartPre=//something 
WatchdogSec=11min 
Restart=on-failure