mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-06-26 08:14:42 +00:00
Determine the endianness on runtime if it's possible in Go (default little-endian) #run_acceptance_tests
This commit is contained in:
parent
8ea163bcef
commit
a2c83c6040
@ -9,6 +9,7 @@
|
|||||||
package tap
|
package tap
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/binary"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
@ -17,6 +18,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
"time"
|
"time"
|
||||||
|
"unsafe"
|
||||||
|
|
||||||
"github.com/shirou/gopsutil/cpu"
|
"github.com/shirou/gopsutil/cpu"
|
||||||
"github.com/struCoder/pidusage"
|
"github.com/struCoder/pidusage"
|
||||||
@ -298,8 +300,10 @@ func startTlsTapper(extension *api.Extension, outputItems chan *api.OutputChanne
|
|||||||
OutputChannel: outputItems,
|
OutputChannel: outputItems,
|
||||||
}
|
}
|
||||||
|
|
||||||
go tls.PollForLogging()
|
byteOrder := getByteOrder()
|
||||||
go tls.Poll(emitter, options, streamsMap)
|
|
||||||
|
go tls.PollForLogging(byteOrder)
|
||||||
|
go tls.Poll(byteOrder, emitter, options, streamsMap)
|
||||||
|
|
||||||
return &tls
|
return &tls
|
||||||
}
|
}
|
||||||
@ -319,3 +323,20 @@ func buildIgnoredPortsList(ignoredPorts string) []uint16 {
|
|||||||
|
|
||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getByteOrder() (byteOrder binary.ByteOrder) {
|
||||||
|
buf := [2]byte{}
|
||||||
|
*(*uint16)(unsafe.Pointer(&buf[0])) = uint16(0xABCD)
|
||||||
|
|
||||||
|
switch buf {
|
||||||
|
case [2]byte{0xCD, 0xAB}:
|
||||||
|
byteOrder = binary.LittleEndian
|
||||||
|
case [2]byte{0xAB, 0xCD}:
|
||||||
|
byteOrder = binary.BigEndian
|
||||||
|
default:
|
||||||
|
logger.Log.Warning("Could not determine native endianness. Defaulting to little-endian")
|
||||||
|
byteOrder = binary.LittleEndian
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
@ -52,7 +52,7 @@ func (p *bpfLogger) close() error {
|
|||||||
return p.logReader.Close()
|
return p.logReader.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *bpfLogger) poll() {
|
func (p *bpfLogger) poll(byteOrder binary.ByteOrder) {
|
||||||
logger.Log.Infof("Start polling for bpf logs")
|
logger.Log.Infof("Start polling for bpf logs")
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@ -76,7 +76,7 @@ func (p *bpfLogger) poll() {
|
|||||||
|
|
||||||
var log logMessage
|
var log logMessage
|
||||||
|
|
||||||
if err := binary.Read(buffer, binary.LittleEndian, &log); err != nil {
|
if err := binary.Read(buffer, byteOrder, &log); err != nil {
|
||||||
LogError(errors.Errorf("Error parsing log %v", err))
|
LogError(errors.Errorf("Error parsing log %v", err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -75,11 +75,11 @@ func (p *tlsPoller) close() error {
|
|||||||
return p.chunksReader.Close()
|
return p.chunksReader.Close()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *tlsPoller) poll(emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) {
|
func (p *tlsPoller) poll(byteOrder binary.ByteOrder, emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) {
|
||||||
// tlsTapperTlsChunk is generated by bpf2go.
|
// tlsTapperTlsChunk is generated by bpf2go.
|
||||||
chunks := make(chan *tlsTapperTlsChunk)
|
chunks := make(chan *tlsTapperTlsChunk)
|
||||||
|
|
||||||
go p.pollChunksPerfBuffer(chunks)
|
go p.pollChunksPerfBuffer(byteOrder, chunks)
|
||||||
|
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
@ -97,7 +97,7 @@ func (p *tlsPoller) poll(emitter api.Emitter, options *api.TrafficFilteringOptio
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *tlsPoller) pollChunksPerfBuffer(chunks chan<- *tlsTapperTlsChunk) {
|
func (p *tlsPoller) pollChunksPerfBuffer(byteOrder binary.ByteOrder, chunks chan<- *tlsTapperTlsChunk) {
|
||||||
logger.Log.Infof("Start polling for tls events")
|
logger.Log.Infof("Start polling for tls events")
|
||||||
|
|
||||||
for {
|
for {
|
||||||
@ -123,7 +123,7 @@ func (p *tlsPoller) pollChunksPerfBuffer(chunks chan<- *tlsTapperTlsChunk) {
|
|||||||
|
|
||||||
var chunk tlsTapperTlsChunk
|
var chunk tlsTapperTlsChunk
|
||||||
|
|
||||||
if err := binary.Read(buffer, binary.LittleEndian, &chunk); err != nil {
|
if err := binary.Read(buffer, byteOrder, &chunk); err != nil {
|
||||||
LogError(errors.Errorf("Error parsing chunk %v", err))
|
LogError(errors.Errorf("Error parsing chunk %v", err))
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package tlstapper
|
package tlstapper
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/binary"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
@ -58,12 +59,12 @@ func (t *TlsTapper) Init(chunksBufferSize int, logBufferSize int, procfs string,
|
|||||||
return t.poller.init(&t.bpfObjects, chunksBufferSize)
|
return t.poller.init(&t.bpfObjects, chunksBufferSize)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TlsTapper) Poll(emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) {
|
func (t *TlsTapper) Poll(byteOrder binary.ByteOrder, emitter api.Emitter, options *api.TrafficFilteringOptions, streamsMap api.TcpStreamMap) {
|
||||||
t.poller.poll(emitter, options, streamsMap)
|
t.poller.poll(byteOrder, emitter, options, streamsMap)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TlsTapper) PollForLogging() {
|
func (t *TlsTapper) PollForLogging(byteOrder binary.ByteOrder) {
|
||||||
t.bpfLogger.poll()
|
t.bpfLogger.poll(byteOrder)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (t *TlsTapper) GlobalSsllibTap(sslLibrary string) error {
|
func (t *TlsTapper) GlobalSsllibTap(sslLibrary string) error {
|
||||||
|
Loading…
Reference in New Issue
Block a user