in pkg/accesslog/collector/connection.go [233:291]
func (c *ConnectionPartitionContext) BuildSocketPair(event *events.SocketConnectEvent) *ip.SocketPair {
var result *ip.SocketPair
haveConnTrack := false
if event.SocketFamily == unix.AF_INET {
result = &ip.SocketPair{
Family: uint32(event.SocketFamily),
Role: enums.ConnectionRole(event.Role),
SrcIP: ip.ParseIPV4(event.LocalAddrV4),
SrcPort: uint16(event.LocalAddrPort),
}
if event.ConnTrackUpstreamIPl != 0 && event.ConnTrackUpstreamPort != 0 {
haveConnTrack = true
result.DestIP = ip.ParseIPV4(uint32(event.ConnTrackUpstreamIPl))
result.DestPort = uint16(event.ConnTrackUpstreamPort)
if connectionLogger.Enable(logrus.DebugLevel) {
connectionLogger.Debugf("found the connection from the conntrack, connection ID: %d, randomID: %d, original: %s:%d, conntrack: %s:%d",
event.ConID, event.RandomID, ip.ParseIPV4(event.RemoteAddrV4), uint16(event.RemoteAddrPort), result.DestIP, result.DestPort)
}
} else {
result.DestIP = ip.ParseIPV4(event.RemoteAddrV4)
result.DestPort = uint16(event.RemoteAddrPort)
}
} else if event.SocketFamily == unix.AF_INET6 {
result = &ip.SocketPair{
Family: uint32(event.SocketFamily),
Role: enums.ConnectionRole(event.Role),
SrcIP: ip.ParseIPV6(event.LocalAddrV6),
SrcPort: uint16(event.LocalAddrPort),
}
if event.ConnTrackUpstreamIPl != 0 && event.ConnTrackUpstreamPort != 0 {
haveConnTrack = true
if event.ConnTrackUpstreamIPh != 0 {
var ipv6 [16]uint8
binary.BigEndian.PutUint64(ipv6[0:8], event.ConnTrackUpstreamIPh)
binary.BigEndian.PutUint64(ipv6[8:16], event.ConnTrackUpstreamIPl)
result.DestIP = ip.ParseIPV6(ipv6)
} else {
result.DestIP = ip.ParseIPV4(uint32(event.ConnTrackUpstreamIPl))
}
result.DestPort = uint16(event.ConnTrackUpstreamPort)
if connectionLogger.Enable(logrus.DebugLevel) {
connectionLogger.Debugf("found the connection from the conntrack, connection ID: %d, randomID: %d, original: %s:%d, conntrack: %s:%d",
event.ConID, event.RandomID, ip.ParseIPV6(event.RemoteAddrV6), uint16(event.RemoteAddrPort), result.DestIP, result.DestPort)
}
} else {
result.DestIP = ip.ParseIPV6(event.RemoteAddrV6)
result.DestPort = uint16(event.RemoteAddrPort)
}
}
if haveConnTrack {
return result
}
c.FixSocketFamilyIfNeed(event, result)
c.CheckNeedConntrack(event, result)
return result
}