MCPcopy Create free account
hub / github.com/codeyourweb/irma / CaptureInterface

Function CaptureInterface

networkcapture.go:61–119  ·  view source on GitHub ↗

CaptureInterface dump all packet on specified network interface

(iface *net.Interface, devices *[]pcap.Interface, bpffilter string, f *os.File, verbose bool)

Source from the content-addressed store, hash-verified

59
60// CaptureInterface dump all packet on specified network interface
61func CaptureInterface(iface *net.Interface, devices *[]pcap.Interface, bpffilter string, f *os.File, verbose bool) error {
62 // We just look for IPv4 addresses, so try to find if the interface has one.
63 var addr *net.IPNet
64 addrs, err := iface.Addrs()
65 if err != nil {
66 return err
67 }
68
69 for _, a := range addrs {
70 if ipnet, ok := a.(*net.IPNet); ok {
71 if ip4 := ipnet.IP.To4(); ip4 != nil {
72 addr = &net.IPNet{
73 IP: ip4,
74 Mask: ipnet.Mask[len(ipnet.Mask)-4:],
75 }
76 break
77 }
78 }
79 }
80
81 fmt.Printf("[INFO] Using network range %v for interface \"%v\"", addr, iface.Name)
82
83 // Try to find a match between device and interface
84 var deviceName string
85 for _, d := range *devices {
86 if strings.Contains(fmt.Sprint(d.Addresses), fmt.Sprint(addr.IP)) {
87 deviceName = d.Name
88 }
89 }
90
91 if deviceName == "" {
92 return fmt.Errorf("Cannot find the corresponding device for the interface \"%v\"", iface.Name)
93 }
94
95 // Open up a pcap handle for packet reads/writes.
96 handle, err := pcap.OpenLive(deviceName, 65536, true, pcap.BlockForever)
97 if err != nil {
98 return err
99 }
100 defer handle.Close()
101
102 // BPF filter
103 if len(bpffilter) > 0 {
104 if err = handle.SetBPFFilter(bpffilter); err != nil {
105 return fmt.Errorf("BPF filter error: %s", err.Error())
106 }
107 }
108
109 // Starting capture
110 w := pcapgo.NewWriter(f)
111 w.WriteFileHeader(65536, layers.LinkTypeEthernet)
112
113 packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
114 for packet := range packetSource.Packets() {
115 w.WritePacket(packet.Metadata().CaptureInfo, packet.Data())
116 }
117
118 return nil

Callers 1

NetworkAnalysisRoutineFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected