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

Function cappacp

cap_windows.go:31–115  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

29)
30
31func cappacp() {
32 //var flagHEX bool
33 IPADDR := flag.String("a", "127.0.0.1", "NIC IP Addr")
34 filenmae := flag.String("f", "./cap.pcap", "pcap file save path")
35 flagHEX := flag.Bool("x", false, "only print hex dump")
36
37 flag.Parse()
38
39 fmt.Printf("Start packet capture! NIC addr: %s pcap save path: %s\n", *IPADDR, *filenmae)
40
41 fd, err := syscall.Socket(syscall.AF_INET, syscall.SOCK_RAW, syscall.IPPROTO_IP) //创建一个 RAW SOCKET
42 if err != nil {
43 fmt.Println("Socket ERROR", err)
44 return
45 }
46 defer syscall.Close(fd)
47 ip := net.ParseIP(*IPADDR)
48
49 var ipv4 [4]byte
50 copy(ipv4[:], ip.To4())
51 addr := syscall.SockaddrInet4{
52 Port: 0,
53 Addr: ipv4,
54 }
55
56 err = syscall.Bind(fd, &addr)
57 if err != nil {
58 fmt.Println(err)
59 return
60 }
61
62 flags := uint32(RCVALL_IPLEVEL)
63 size := uint32(unsafe.Sizeof(flags))
64 unused := uint32(0)
65 err = syscall.WSAIoctl(fd, SIO_RCVALL, (*byte)(unsafe.Pointer(&flags)), size, nil, 0, &unused, nil, 0) //设置 SIO_RCVALL
66 if err != nil {
67 fmt.Println("WSAIoctl ERROR", err)
68 return
69 }
70 if _, err := os.Stat(*filenmae); !os.IsNotExist(err) {
71 if err := os.Remove(*filenmae); err != nil {
72 fmt.Println(err)
73 }
74 }
75 f, err := os.OpenFile(*filenmae, os.O_APPEND|os.O_CREATE|os.O_RDWR, 0666)
76 if err != nil {
77 fmt.Println(err)
78 return
79 }
80 w := pcapgo.NewWriter(f)
81 err = w.WriteFileHeader(1024, layers.LinkTypeEthernet)
82 if err != nil {
83 fmt.Println(err)
84 return
85 }
86 defer f.Close()
87 buf := make([]byte, 65536)
88 for {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected