Du kannst nicht mehr als 25 Themen auswählen
Themen müssen entweder mit einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.
85 Zeilen
2.0 KiB
Go
85 Zeilen
2.0 KiB
Go
package util
|
|
|
|
import (
|
|
"crypto/rand"
|
|
"github.com/google/gopacket"
|
|
"github.com/google/gopacket/layers"
|
|
"github.com/google/gopacket/pcapgo"
|
|
log "github.com/sirupsen/logrus"
|
|
"io/ioutil"
|
|
"net"
|
|
"os"
|
|
"strconv"
|
|
"time"
|
|
)
|
|
|
|
// WritePcapNg writes the provided data to a given pcap file
|
|
func WritePcapNg(file string, data []byte) {
|
|
f, err := os.Create(file)
|
|
if err != nil {
|
|
log.Errorf("Error writing pcap file %s", file)
|
|
}
|
|
defer f.Close()
|
|
|
|
r, err := pcapgo.NewNgWriter(f, layers.LinkTypeEthernet)
|
|
if err != nil {
|
|
log.Errorf("Error writing pcap file %s", file)
|
|
}
|
|
defer r.Flush()
|
|
|
|
ci := gopacket.CaptureInfo{
|
|
Timestamp: time.Now(),
|
|
CaptureLength: len(data),
|
|
Length: len(data),
|
|
}
|
|
|
|
err = r.WritePacket(ci, data)
|
|
}
|
|
|
|
func WritePcap(file string, data []byte) {
|
|
f, _ := os.Create(file)
|
|
w := pcapgo.NewWriter(f)
|
|
w.WriteFileHeader(65536, layers.LinkTypeEthernet) // new file, must do this.
|
|
ci := gopacket.CaptureInfo{
|
|
Timestamp: time.Now(),
|
|
CaptureLength: len(data),
|
|
Length: len(data),
|
|
}
|
|
w.WritePacket(ci, data)
|
|
f.Close()
|
|
}
|
|
|
|
// WriteBinary writes the provided data to a given binary file
|
|
func WriteBinary(file string, data []byte) {
|
|
if err := ioutil.WriteFile(file, data, 0644); err != nil {
|
|
log.Errorf("Error writing binary file %s", file)
|
|
}
|
|
}
|
|
|
|
func WritePIDFile(filename string) {
|
|
if filename == "" {
|
|
return
|
|
}
|
|
if err := ioutil.WriteFile(filename, []byte(strconv.Itoa(os.Getpid()) + "\n"), 0644); err != nil {
|
|
log.Errorf("Error writing PID file %s", filename)
|
|
}
|
|
}
|
|
|
|
func GenerateMac(customMAC string) net.HardwareAddr {
|
|
if customMAC != "" {
|
|
ret, _ := net.ParseMAC(customMAC)
|
|
return ret
|
|
}
|
|
buf := make([]byte, 6)
|
|
var mac net.HardwareAddr
|
|
if _, err := rand.Read(buf); err != nil {
|
|
log.Error("Error generating random mac")
|
|
ret, _ := net.ParseMAC("52:54:00:12:34:aa")
|
|
return ret
|
|
}
|
|
// Set local bit, ensure unicast address
|
|
buf[0] = (buf[0] | 2) & 0xfe
|
|
mac = append(mac, buf[0], buf[1], buf[2], buf[3], buf[4], buf[5])
|
|
return mac
|
|
}
|