Skip to content

Commit

Permalink
Expose connection ID creation
Browse files Browse the repository at this point in the history
  • Loading branch information
dhaavi committed Jul 20, 2023
1 parent 28d3d24 commit 5d7caeb
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 18 deletions.
19 changes: 1 addition & 18 deletions network/packet/packet.go
Original file line number Diff line number Diff line change
Expand Up @@ -112,28 +112,11 @@ func (pkt *Base) Payload() []byte {
// GetConnectionID returns the link ID for this packet.
func (pkt *Base) GetConnectionID() string {
if pkt.connID == "" {
pkt.createConnectionID()
pkt.connID = pkt.info.CreateConnectionID()
}
return pkt.connID
}

func (pkt *Base) createConnectionID() {
// TODO: make this ID not depend on the packet direction for better support for forwarded packets.
if pkt.info.Protocol == TCP || pkt.info.Protocol == UDP {
if pkt.info.Inbound {
pkt.connID = fmt.Sprintf("%d-%s-%d-%s-%d", pkt.info.Protocol, pkt.info.Dst, pkt.info.DstPort, pkt.info.Src, pkt.info.SrcPort)
} else {
pkt.connID = fmt.Sprintf("%d-%s-%d-%s-%d", pkt.info.Protocol, pkt.info.Src, pkt.info.SrcPort, pkt.info.Dst, pkt.info.DstPort)
}
} else {
if pkt.info.Inbound {
pkt.connID = fmt.Sprintf("%d-%s-%s", pkt.info.Protocol, pkt.info.Dst, pkt.info.Src)
} else {
pkt.connID = fmt.Sprintf("%d-%s-%s", pkt.info.Protocol, pkt.info.Src, pkt.info.Dst)
}
}
}

// MatchesAddress checks if a the packet matches a given endpoint (remote or local) in protocol, network and port.
//
// Comparison matrix:
Expand Down
24 changes: 24 additions & 0 deletions network/packet/packetinfo.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package packet

import (
"fmt"
"net"
"time"
)
Expand Down Expand Up @@ -50,3 +51,26 @@ func (pi *Info) RemotePort() uint16 {
}
return pi.DstPort
}

// CreateConnectionID creates a connection ID.
// In most circumstances, this method should not be used directly, but
// packet.GetConnectionID() should be called instead.
func (pi *Info) CreateConnectionID() string {
return CreateConnectionID(pi.Protocol, pi.Src, pi.SrcPort, pi.Dst, pi.DstPort, pi.Inbound)
}

// CreateConnectionID creates a connection ID.
func CreateConnectionID(protocol IPProtocol, src net.IP, srcPort uint16, dst net.IP, dstPort uint16, inbound bool) string {
// TODO: make this ID not depend on the packet direction for better support for forwarded packets.
if protocol == TCP || protocol == UDP {
if inbound {
return fmt.Sprintf("%d-%s-%d-%s-%d", protocol, dst, dstPort, src, srcPort)
}
return fmt.Sprintf("%d-%s-%d-%s-%d", protocol, src, srcPort, dst, dstPort)
}

if inbound {
return fmt.Sprintf("%d-%s-%s", protocol, dst, src)
}
return fmt.Sprintf("%d-%s-%s", protocol, src, dst)
}

0 comments on commit 5d7caeb

Please sign in to comment.