Expose connection ID creation
This commit is contained in:
@@ -112,28 +112,11 @@ func (pkt *Base) Payload() []byte {
|
|||||||
// GetConnectionID returns the link ID for this packet.
|
// GetConnectionID returns the link ID for this packet.
|
||||||
func (pkt *Base) GetConnectionID() string {
|
func (pkt *Base) GetConnectionID() string {
|
||||||
if pkt.connID == "" {
|
if pkt.connID == "" {
|
||||||
pkt.createConnectionID()
|
pkt.connID = pkt.info.CreateConnectionID()
|
||||||
}
|
}
|
||||||
return pkt.connID
|
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.
|
// MatchesAddress checks if a the packet matches a given endpoint (remote or local) in protocol, network and port.
|
||||||
//
|
//
|
||||||
// Comparison matrix:
|
// Comparison matrix:
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package packet
|
package packet
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
"net"
|
"net"
|
||||||
"time"
|
"time"
|
||||||
)
|
)
|
||||||
@@ -50,3 +51,26 @@ func (pi *Info) RemotePort() uint16 {
|
|||||||
}
|
}
|
||||||
return pi.DstPort
|
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)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user