Skip to content

Commit

Permalink
Merge pull request #30 from synfinatic/add-raw-support
Browse files Browse the repository at this point in the history
Add LinkTypeRaw support for Wireguard
  • Loading branch information
synfinatic authored Oct 10, 2020
2 parents e527e4c + 1e68193 commit 1a6a0ba
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 3 deletions.
11 changes: 11 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# udp-proxy-2020 Changelog

## Unreleased

Added:

- Support for Wireguard (LinkType RAW) interfaces #29

## v0.0.4 - 02-10-2020

Initial release
14 changes: 11 additions & 3 deletions cmd/listen.go
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ var validLinkTypes = []layers.LinkType{
layers.LinkTypeLoop,
layers.LinkTypeEthernet,
layers.LinkTypeNull,
layers.LinkTypeRaw,
}

// Creates a Listen struct for the given interface, promisc mode, udp sniff ports and timeout
Expand Down Expand Up @@ -148,6 +149,8 @@ func (l *Listen) sendPackets(sndpkt Send) {
parser = gopacket.NewDecodingLayerParser(layers.LayerTypeLoopback, &loop, &ip4, &udp, &payload)
case layers.LinkTypeEthernet:
parser = gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &udp, &payload)
case layers.LinkTypeRaw:
parser = gopacket.NewDecodingLayerParser(layers.LayerTypeIPv4, &ip4, &udp, &payload)
default:
log.Fatalf("Unsupported source linktype: 0x%02x", sndpkt.linkType)
}
Expand Down Expand Up @@ -246,15 +249,18 @@ func (l *Listen) sendPacket(dstip net.IP, eth layers.Ethernet, loop layers.Loopb
log.Fatalf("can't serialize IP header: %v", new_ip4)
}

// Loopback or Ethernet
if (l.netif.Flags & net.FlagLoopback) > 0 {
// Add our L2 header to the buffer
switch l.handle.LinkType() {
case layers.LinkTypeNull, layers.LinkTypeLoop:
loop := layers.Loopback{
Family: layers.ProtocolFamilyIPv4,
}
if err := loop.SerializeTo(buffer, opts); err != nil {
log.Fatalf("can't serialize Loop header: %v", loop)
}
} else {
case layers.LinkTypeRaw:
// nothing
case layers.LinkTypeEthernet:
// build a new ethernet header
new_eth := layers.Ethernet{
BaseLayer: layers.BaseLayer{},
Expand Down Expand Up @@ -287,6 +293,8 @@ func (l *Listen) learnClientIP(packet gopacket.Packet) {
parser = gopacket.NewDecodingLayerParser(layers.LayerTypeLoopback, &loop, &ip4, &udp, &payload)
case layers.LinkTypeEthernet:
parser = gopacket.NewDecodingLayerParser(layers.LayerTypeEthernet, &eth, &ip4, &udp, &payload)
case layers.LinkTypeRaw:
parser = gopacket.NewDecodingLayerParser(layers.LayerTypeIPv4, &ip4, &udp, &payload)
default:
log.Fatalf("Unsupported source linktype: 0x%02x", l.handle.LinkType())
}
Expand Down

0 comments on commit 1a6a0ba

Please sign in to comment.