// Activate should only be called on a Pcap that was obtained through Create. func (p *Pcap) Activate() error { res := int32(C.pcap_activate(p.cptr)) if res < 0 { return fmt.Errorf("%s(errnum=%d)", Statustostr(res), res) } return nil }
// Activate the packet source. Note that after calling this method it will not // be possible to change the packet source configuration (MTU, promiscuous mode, // monitor mode, ...) func (h *Handle) Activate() error { err := C.pcap_activate(h.pcap) if err < 0 { return fmt.Errorf("Could not activate: %s", h.get_error()) } return nil }
// Activate activates the handle. The current InactiveHandle becomes invalid // and all future function calls on it will fail. func (p *InactiveHandle) Activate() (*Handle, error) { err := activateError(C.pcap_activate(p.cptr)) if err != aeNoError { return nil, err } h := &Handle{cptr: p.cptr, device: p.device, blockForever: p.blockForever} p.cptr = nil return h, nil }
func main() { var errbuf = (*C.char)(C.malloc(C.PCAP_ERRBUF_SIZE)) defer C.free(unsafe.Pointer(errbuf)) var source = C.CString("any") defer C.free(unsafe.Pointer(source)) pcap_handle := C.pcap_create(source, errbuf) if pcap_handle == nil { panic("pcap_handle") } C.pcap_set_buffer_size(pcap_handle, 2*1024*1024) C.pcap_set_promisc(pcap_handle, 1) C.pcap_set_snaplen(pcap_handle, 512) // more than enough to recognize a WOL packet C.pcap_setdirection(pcap_handle, C.PCAP_D_IN) if C.pcap_activate(pcap_handle) != 0 { panic(C.GoString(C.pcap_geterr(pcap_handle))) } var bpf_program C.struct_bpf_program if C.pcap_compile(pcap_handle, &bpf_program, pcap_filter, 0, 0) != 0 { panic(C.GoString(C.pcap_geterr(pcap_handle))) } if C.pcap_setfilter(pcap_handle, &bpf_program) != 0 { panic(C.GoString(C.pcap_geterr(pcap_handle))) } for { var pkt_header *C.struct_pcap_pkthdr var pkt_data *C.u_char if C.pcap_next_ex(pcap_handle, &pkt_header, &pkt_data) < 0 { panic(C.GoString(C.pcap_geterr(pcap_handle))) } if pkt_data == nil { continue } data := make([]byte, pkt_header.caplen) copy(data, (*(*[10000000]byte)(unsafe.Pointer(pkt_data)))[0:]) from_mac, to_mac := checkwol(data) if from_mac != "" { fmt.Printf("%v: %v sends WOL to %v\n", time.Now(), from_mac, to_mac) } } }
// Activate a packet capture handle to look at packets on the network, with the options that // were set on the handle being in effect. func (p *Pcap) Activate() error { if C.pcap_activate(p.cptr) != 0 { return p.Geterror() } return nil }
func (p *Handle) activation() { C.pcap_activate(p.cptr) }