+ """pcap(name=None, snaplen=65535, promisc=True, timeout_ms=None, immediate=False) -> packet capture object
--- ./pcap.pyx.orig 2011-10-01 22:35:33.141146678 -0400
+++ ./pcap.pyx 2011-10-01 22:35:39.416147272 -0400
"""packet capture library
cdef extern from "Python.h":
object PyBuffer_FromMemory(char *s, int len)
+ int PyObject_AsCharBuffer(object obj, char **buffer, int *buffer_len)
void PyGILState_Release(int gil)
void Py_BEGIN_ALLOW_THREADS()
+ ctypedef struct pcap_if_t # hack for win32
+ ctypedef struct pcap_if_t:
ctypedef void (*pcap_handler)(void *arg, pcap_pkthdr *hdr, char *pkt)
char *pcap_geterr(pcap_t *p)
void pcap_close(pcap_t *p)
int bpf_filter(bpf_insn *insns, char *buf, int len, int caplen)
+ int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf)
+ void pcap_freealldevs(pcap_if_t *alldevs)
+ int pcap_lookupnet(char *device,
+ int pcap_sendpacket(pcap_t *p, char *buf, int size)
cdef extern from "pcap_ex.h":
# XXX - hrr, sync with libdnet and libevent
raise IOError, 'bad filter'
"""Return boolean match for buf against our filter."""
- if bpf_filter(self.fcode.bf_insns, buf, n, n) == 0:
+ if PyObject_AsCharBuffer(buf, &p, &n) < 0:
+ if bpf_filter(self.fcode.bf_insns, p, n, n) == 0:
pcap_freecode(&self.fcode)