MCPcopy Create free account
hub / github.com/burpheart/GoNetCapture / cappacp

Function cappacp

cap_linux.go:21–76  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

19 return int((v << 8) | (v >> 8))
20}
21func cappacp() {
22
23 flagHEX := flag.Bool("x", false, "only print hex dump")
24 filenmae := flag.String("f", "./cap.pcap", "pcap file save path")
25
26 flag.Parse()
27
28 // 打开raw socket
29 fd, err := syscall.Socket(syscall.AF_PACKET, syscall.SOCK_RAW, Htons(syscall.ETH_P_ALL))
30
31 if err != nil {
32 fmt.Println(err)
33 return
34 }
35 defer syscall.Close(fd)
36 buf := make([]byte, 65536)
37 if _, err := os.Stat(*filenmae); !os.IsNotExist(err) {
38 if err := os.Remove(*filenmae); err != nil {
39 fmt.Println(err)
40 }
41 }
42
43 f, err := os.OpenFile(*filenmae, os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
44 if err != nil {
45 fmt.Println(err)
46 return
47 }
48 w := pcapgo.NewWriter(f)
49 w.WriteFileHeader(1024, layers.LinkTypeEthernet)
50 defer f.Close()
51
52 for {
53 n, _, err := syscall.Recvfrom(fd, buf, 0)
54 if err != nil {
55 fmt.Println("Recvfrom error", err)
56 return
57 }
58
59 if *flagHEX {
60 fmt.Println(hex.Dump(buf[:n]))
61 } else {
62 packet := buf[:n]
63 var c gopacket.CaptureInfo
64 c.InterfaceIndex = 0
65 c.Length = n
66 c.CaptureLength = n
67 c.Timestamp = time.Now()
68 err = w.WritePacket(c, packet)
69 if err != nil {
70 fmt.Println("WritePacket ERROR", err)
71 }
72 }
73
74 }
75
76}

Callers 1

mainFunction · 0.70

Calls 1

HtonsFunction · 0.85

Tested by

no test coverage detected