commons_go/matcher/dhcp/dhcp.go
jackdaw@loafle.com eb02693cf5 .
2017-04-10 20:14:12 +09:00

189 lines
4.1 KiB
Go

package dhcp
//
//import (
// "bytes"
// "encoding/binary"
// "fmt"
// log "github.com/cihub/seelog"
// "loafle.com/overflow/commons_go/matcher"
// "net"
// "time"
//)
//
//const (
// MAGIC_COOKIE uint32 = 0x63825363
// OPT_CODE_SERVER_IDENTIFIER uint8 = 54
// OPT_CODE_SUBNET_MASK uint8 = 1
// OPT_CODE_ROUTER uint8 = 3
// OPT_CODE_DNS uint8 = 6
//)
//
//type dhcpDiscover struct {
// MsgType byte
// HwType byte
// HwAddrLen byte
// Hops byte
// Xid uint32
// Secs uint16
// BootpFlags uint16
// ClientIp uint32
// YourIp uint32
// NextServerIp uint32
// RelayAgentIp uint32
// ClientMacAddr [6]byte
// ClientHwAddrPadding [10]byte
// ServerHostName [64]byte
// BootFileName [128]byte
// MagicCookie uint32
// Mtype byte
// MtypeLen byte
// MtypeVal byte
// Opts [200]byte
// End byte
// Padding [16]byte
//}
//
//func DiscoverDHCP(zone *types.DiscoveryZone) {
// err := sendDHCPDiscovery()
// if err != nil {
// log.Error(err)
// return
// }
// recvDHCPOffer(zone)
//}
//
//func sendDHCPDiscovery() error {
// dhcp := dhcpDiscover{
// MsgType: 0x01,
// HwType: 0x01,
// HwAddrLen: 0x06,
// Hops: 0x00,
// Xid: 0x00000000,
// Secs: 0x0000,
// ClientIp: 0x00000000,
// YourIp: 0x00000000,
// NextServerIp: 0x00000000,
// RelayAgentIp: 0x00000000,
// MagicCookie: MAGIC_COOKIE,
// Mtype: 0x35,
// MtypeLen: 0x01,
// MtypeVal: 0x01,
// End: 0xff,
// }
//
// var flag uint16 = 0
// dhcp.BootpFlags = ^flag // flag = unicast , ^flag = broadcast
//
// //TODO : getting mac addr from zone
// dhcp.ClientMacAddr[0] = 0x50
// dhcp.ClientMacAddr[1] = 0xe5
// dhcp.ClientMacAddr[2] = 0x49
// dhcp.ClientMacAddr[3] = 0x46
// dhcp.ClientMacAddr[4] = 0x93
// dhcp.ClientMacAddr[5] = 0x28
//
// writer := new(bytes.Buffer)
// binary.Write(writer, binary.BigEndian, dhcp)
// conn, err := net.Dial("udp", "255.255.255.255:67")
// if err != nil {
// return err
// }
// conn.Write(writer.Bytes())
// defer conn.Close()
//
// return nil
//}
//
//func recvDHCPOffer(zone *types.DiscoveryZone) {
//
// socket, err := net.ListenUDP("udp4", &net.UDPAddr{
// IP: net.IPv4(255, 255, 255, 255),
// Port: 68,
// })
// if err != nil {
// log.Error(err)
// return
// }
// err = socket.SetDeadline(time.Now().Add(3 * time.Second))
// if err != nil {
// log.Error(err)
// return
// }
//
// buf := make([]byte, 4096)
// n, _, err := socket.ReadFromUDP(buf)
// if err != nil {
// log.Error(err)
// return
// }
// if n <= 0 {
// log.Error("No DHCP offer.")
// return
// }
//
// offer := dhcpDiscover{}
//
// reader := new(bytes.Buffer)
// reader.Write(buf)
// if err := binary.Read(reader, binary.BigEndian, &offer); err != nil {
// log.Error(err)
// return
// }
// if offer.MagicCookie != MAGIC_COOKIE {
// log.Error("Not a DHCP packet.")
// return
// }
//
// //option searching
// r := new(bytes.Buffer)
// r.Write(offer.Opts[:])
//
// for i := 0; i < r.Len(); i++ {
// v := r.Next(1)[0]
//
// if v == OPT_CODE_SUBNET_MASK && r.Next(1)[0] == 4 {
// ipStr := byteToIpString(r.Next(4))
// log.Infof("SUBNET MASK: %s", ipStr)
// }
//
// if v == OPT_CODE_ROUTER && r.Next(1)[0] == 4 {
// ipStr := byteToIpString(r.Next(4))
// log.Infof("ROUTER: %s", ipStr)
// }
//
// if v == OPT_CODE_DNS {
// len := r.Next(1)[0]
// var dns []string = make([]string, 0)
// var ipStr string
// ipStr = byteToIpString(r.Next(4))
// dns = append(dns, ipStr)
// if len == 8 {
// ipStr = byteToIpString(r.Next(4))
// dns = append(dns, ipStr)
// }
// log.Infof("DNS", dns)
// }
//
// if v == OPT_CODE_SERVER_IDENTIFIER && r.Next(1)[0] == 4 {
// ipStr := byteToIpString(r.Next(4))
// log.Infof("DHCP SERVER: %s", ipStr)
// }
// }
//
//}
//
//func byteToIpString(b []byte) string {
// var ipStr string
// len := len(b)
// for i := 0; i < len; i++ {
// v := b[i]
// ipStr += fmt.Sprintf("%d", v)
// if i < len-1 {
// ipStr += "."
// }
// }
//
// return ipStr
//}