Skip to content

Commit

Permalink
Judge client id in dhcpv4
Browse files Browse the repository at this point in the history
  • Loading branch information
nmreadelf committed Aug 17, 2023
1 parent 05262d7 commit b0132bd
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 2 deletions.
7 changes: 5 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ require (
github.com/ameshkov/dnscrypt/v2 v2.2.7
github.com/bluele/gcache v0.0.2
github.com/digineo/go-ipset/v2 v2.2.1
github.com/dimfeld/httptreemux/v5 v5.5.0
github.com/fsnotify/fsnotify v1.6.0
github.com/go-ping/ping v1.1.0
github.com/google/go-cmp v0.5.9
Expand Down Expand Up @@ -40,6 +39,11 @@ require (
howett.net/plist v1.0.0
)

require (
github.com/dimfeld/httptreemux/v5 v5.5.0
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63
)

require (
github.com/aead/chacha20 v0.0.0-20180709150244-8b13a72661da // indirect
github.com/aead/poly1305 v0.0.0-20180717145839-3fee0db0b635 // indirect
Expand All @@ -57,7 +61,6 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
github.com/quic-go/qpack v0.4.0 // indirect
github.com/quic-go/qtls-go1-20 v0.3.2 // indirect
github.com/u-root/uio v0.0.0-20230305220412-3e8cd9d6bf63 // indirect
golang.org/x/mod v0.12.0 // indirect
golang.org/x/sync v0.3.0 // indirect
golang.org/x/text v0.12.0 // indirect
Expand Down
19 changes: 19 additions & 0 deletions internal/dhcpd/v4_unix.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/go-ping/ping"
"github.com/insomniacslk/dhcp/dhcpv4"
"github.com/insomniacslk/dhcp/dhcpv4/server4"
"github.com/u-root/uio/uio"
"golang.org/x/exp/slices"
)

Expand Down Expand Up @@ -1162,6 +1163,24 @@ func (s *v4Server) packetHandler(conn net.PacketConn, peer net.Addr, req *dhcpv4

return
}
if opt := req.Options.Get(dhcpv4.OptionClientIdentifier); opt != nil {
buf := uio.NewBigEndianBuffer(opt)
length := buf.Read8()
hdType := buf.Read8()
// refer: https://github.com/wireshark/wireshark/blob/c3cc0e5fa7123f3d493c6a61b8919eac2973000f/epan/dissectors/packet-dhcp.c#L2306
// The code for this option is 61, and its minimum length is 2.
//
// Code Len Type Client-Identifier
// +-----+-----+-----+-----+-----+---
// | 61 | n | t1 | i1 | i2 | ...
// +-----+-----+-----+-----+-----+---
// A hardware type of 0 (zero) should be used when the value field
// contains an identifier other than a hardware address
// mac address length plus type field equal seven
if hdType > 0 && length == 7 {
buf.ReadBytes(req.ClientHWAddr)
}
}

err = netutil.ValidateMAC(req.ClientHWAddr)
if err != nil {
Expand Down

0 comments on commit b0132bd

Please sign in to comment.