mirror of https://github.com/dirtbags/fluffy.git
Add freq and histogram. Use getopt.
This commit is contained in:
parent
23cd09d537
commit
5b679b45ec
78
hd.go
78
hd.go
|
@ -1,78 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bytes"
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"io"
|
|
||||||
)
|
|
||||||
|
|
||||||
const charset = "" +
|
|
||||||
"·☺☻♥♦♣♠•◘○◙♂♀♪♫☼" +
|
|
||||||
"►◄↕‼¶§▬↨↑↓→←∟↔▲▼" +
|
|
||||||
" !\"#$%&'()*+,-./" +
|
|
||||||
"0123456789:;<=>?" +
|
|
||||||
"@ABCDEFGHIJKLMNO" +
|
|
||||||
"PQRSTUVWXYZ[\\]^_" +
|
|
||||||
"`abcdefghijklmno" +
|
|
||||||
"pqrstuvwxyz{|}~⌂" +
|
|
||||||
|
|
||||||
"ÇüéâäàåçêëèïîìÄÅ" +
|
|
||||||
"ÉæÆôöòûùÿÖÜ¢£¥€ƒ" +
|
|
||||||
"áíóúñѪº½⅓¼⅕⅙⅛«»" +
|
|
||||||
"░▒▓│┤╡╢╖╕╣║╗╝╜╛┐" +
|
|
||||||
"└┴┬├─┼╞╟╚╔╩╦╠═╬╧" +
|
|
||||||
"╨╤╥╙╘╒╓╫╪┘┌█▄▌▐▀" +
|
|
||||||
"αßΓπΣσµτΦΘΩδ∞φε∩" +
|
|
||||||
"⁰¹²³⁴⁵⁶⁷⁸⁹ⁱⁿ⁽⁼⁾¤"
|
|
||||||
|
|
||||||
func main() {
|
|
||||||
offset := 0
|
|
||||||
b := make([]byte, 16)
|
|
||||||
lb := make([]byte, 16)
|
|
||||||
chars := []rune(charset)
|
|
||||||
skipping := false
|
|
||||||
|
|
||||||
for ;; {
|
|
||||||
n, err := os.Stdin.Read(b)
|
|
||||||
if err != nil {
|
|
||||||
if err != io.EOF {
|
|
||||||
fmt.Println("read failed:", err)
|
|
||||||
}
|
|
||||||
break
|
|
||||||
}
|
|
||||||
|
|
||||||
if (offset > 0) && (bytes.Equal(lb, b)) {
|
|
||||||
if ! skipping {
|
|
||||||
fmt.Println("*")
|
|
||||||
}
|
|
||||||
offset += n
|
|
||||||
skipping = true
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
copy(lb, b)
|
|
||||||
skipping = false
|
|
||||||
|
|
||||||
fmt.Printf("%08x ", offset)
|
|
||||||
offset += n
|
|
||||||
|
|
||||||
for i := 0; i < 16; i += 1 {
|
|
||||||
if i % 8 == 0 {
|
|
||||||
fmt.Printf(" ")
|
|
||||||
}
|
|
||||||
if i < n {
|
|
||||||
fmt.Printf("%02x ", b[i])
|
|
||||||
} else {
|
|
||||||
fmt.Printf(" ")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("ǀ")
|
|
||||||
for i := 0; i < n; i += 1 {
|
|
||||||
fmt.Printf("%c", chars[b[i]])
|
|
||||||
}
|
|
||||||
fmt.Printf("ǀ\n")
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Printf("%08x\n", offset)
|
|
||||||
}
|
|
125
pcap.go
125
pcap.go
|
@ -1,125 +0,0 @@
|
||||||
package main
|
|
||||||
//package pcap
|
|
||||||
|
|
||||||
import (
|
|
||||||
"time"
|
|
||||||
"os"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"encoding/binary"
|
|
||||||
)
|
|
||||||
|
|
||||||
const MAXFRAME = 9000
|
|
||||||
const MAGIC_BE = "\xa1\xb2\xc3\xd4"
|
|
||||||
const MAGIC_LE = "\xd4\xc3\xb2\xa1"
|
|
||||||
|
|
||||||
const LINKTYPE_ETHERNET = 1
|
|
||||||
const LINKTYPE_RAW = 101
|
|
||||||
|
|
||||||
type FileHeader struct {
|
|
||||||
VersionMajor uint16
|
|
||||||
VersionMinor uint16
|
|
||||||
ThisZone int32
|
|
||||||
SigFigs uint32
|
|
||||||
SnapLen uint32
|
|
||||||
LinkType uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
type PcapFile struct {
|
|
||||||
order binary.ByteOrder
|
|
||||||
header FileHeader
|
|
||||||
}
|
|
||||||
|
|
||||||
type FrameHeader struct {
|
|
||||||
Sec uint32
|
|
||||||
Usec uint32
|
|
||||||
Caplen uint32
|
|
||||||
Framelen uint32
|
|
||||||
}
|
|
||||||
|
|
||||||
func (h *FrameHeader) Time() time.Time {
|
|
||||||
return time.Unix(int64(h.Sec), int64(h.Usec) * 1000)
|
|
||||||
}
|
|
||||||
|
|
||||||
type Frame struct {
|
|
||||||
FrameHeader
|
|
||||||
payload []byte
|
|
||||||
}
|
|
||||||
|
|
||||||
type Reader struct {
|
|
||||||
PcapFile
|
|
||||||
r io.Reader
|
|
||||||
}
|
|
||||||
|
|
||||||
type Writer struct {
|
|
||||||
PcapFile
|
|
||||||
w io.Writer
|
|
||||||
}
|
|
||||||
|
|
||||||
func NewReader(r io.Reader) (*Reader, error) {
|
|
||||||
var h FileHeader
|
|
||||||
var order binary.ByteOrder
|
|
||||||
magic := make([]byte, 4)
|
|
||||||
|
|
||||||
if err := r.Read(&magic); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
switch (magic) {
|
|
||||||
case MAGIC_BE:
|
|
||||||
order = binary.BigEndian
|
|
||||||
case MAGIC_LE:
|
|
||||||
order = binary.LittleEndian
|
|
||||||
default:
|
|
||||||
return nil, fmt.Errorf("Cannot determine endianness")
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
if err := binary.Read(r, order, &h); err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
|
|
||||||
ret := &Reader{PcapFile{order, h}, r}
|
|
||||||
|
|
||||||
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() {
|
|
||||||
r, err := NewReader(os.Stdin)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(r.order, r.header)
|
|
||||||
|
|
||||||
for ;; {
|
|
||||||
frame, err := r.Read()
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
if frame == nil {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
fmt.Println("hi")
|
|
||||||
fmt.Println(frame)
|
|
||||||
}
|
|
||||||
}
|
|
Loading…
Reference in New Issue