mirror of https://github.com/dirtbags/fluffy.git
Add Read function
This commit is contained in:
parent
5a587e8898
commit
af0ebc7836
42
pcap.go
42
pcap.go
|
@ -15,20 +15,13 @@ const MAXFRAME = 9000
|
||||||
const LINKTYPE_ETHERNET = 1
|
const LINKTYPE_ETHERNET = 1
|
||||||
const LINKTYPE_RAW = 101
|
const LINKTYPE_RAW = 101
|
||||||
|
|
||||||
type Frame struct {
|
|
||||||
ts time.Time
|
|
||||||
caplen uint32
|
|
||||||
framelen uint32
|
|
||||||
payload string
|
|
||||||
}
|
|
||||||
|
|
||||||
type FileHeader struct {
|
type FileHeader struct {
|
||||||
VersionMajor uint16
|
VersionMajor uint16
|
||||||
VersionMinor uint16
|
VersionMinor uint16
|
||||||
ThisZone int32
|
ThisZone int32
|
||||||
SigFigs uint32
|
SigFigs uint32
|
||||||
SnapLen int32
|
SnapLen uint32
|
||||||
LinkType int32
|
LinkType uint32
|
||||||
}
|
}
|
||||||
|
|
||||||
type PcapFile struct {
|
type PcapFile struct {
|
||||||
|
@ -36,6 +29,17 @@ type PcapFile struct {
|
||||||
header FileHeader
|
header FileHeader
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type FrameHeader struct {
|
||||||
|
ts time.Time
|
||||||
|
caplen uint32
|
||||||
|
framelen uint32
|
||||||
|
}
|
||||||
|
|
||||||
|
type Frame struct {
|
||||||
|
FrameHeader
|
||||||
|
payload []byte
|
||||||
|
}
|
||||||
|
|
||||||
type Reader struct {
|
type Reader struct {
|
||||||
PcapFile
|
PcapFile
|
||||||
r io.Reader
|
r io.Reader
|
||||||
|
@ -67,6 +71,26 @@ func NewReader(r io.Reader) (*Reader, error) {
|
||||||
return ret, nil
|
return ret, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (r *Reader) Read() (*Frame, error) {
|
||||||
|
var h FrameHeader
|
||||||
|
|
||||||
|
if err := binary.Read(r.r, r.order, &h); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
payload := make([]byte, h.caplen)
|
||||||
|
l, err := r.r.Read(payload)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
if uint32(l) < h.caplen {
|
||||||
|
return nil, fmt.Errorf("Short read: %d (wanted %d)", l, h.caplen)
|
||||||
|
}
|
||||||
|
|
||||||
|
ret := &Frame{h, payload}
|
||||||
|
return ret, nil
|
||||||
|
}
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
r, err := NewReader(os.Stdin)
|
r, err := NewReader(os.Stdin)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue