diff --git a/new_packet.pxd b/new_packet.pxd index 2a58f68..e4e3617 100644 --- a/new_packet.pxd +++ b/new_packet.pxd @@ -193,5 +193,5 @@ cdef class CPacket: cdef int nf_callback(self, nfq_q_handle *qh, nfgenmsg *nfmsg, nfq_data *nfa, void *data) cdef parse(self, nfq_q_handle *qh, nfq_data *nfa) nogil - cdef _parse(self, unsigned char *data) + cdef _parse(self, unsigned char **data) cdef void verdict(self, u_int32_t verdict) diff --git a/new_packet.pyx b/new_packet.pyx index d6720f1..3fc0f69 100644 --- a/new_packet.pyx +++ b/new_packet.pyx @@ -79,7 +79,7 @@ cdef class CPacket: self._mark = nfq_get_nfmark(nfa) # splitting packet by tcp/ip layers - self._parse(data) + self._parse(&data) # if (self.continue_condition): # self._before_exit() @@ -88,7 +88,7 @@ cdef class CPacket: # with gil: # callback(self) - cdef _parse(self, unsigned char *data): + cdef _parse(self, unsigned char **data): '''Index tcp/ip packet layers 3 & 4 for use as instance objects. the before_exit method will be called before returning, which can be used to create subclass specific objects like namedtuples or application layer data.''' @@ -101,23 +101,18 @@ cdef class CPacket: cdef udphdr *udp_header cdef icmphdr *icmp_header + self.ip_header = ip_header if (ip_header.protocol == IPPROTO_TCP): - tcp_header[0] = <tcphdr*>data[iphdr_len:] - - self.tcp_header = tcp_header + self.tcp_header = <tcphdr*>data[iphdr_len:] if (ip_header.protocol == IPPROTO_UDP): - udp_header[0] = <udphdr*>data[iphdr_len:] - - self.udp_header = udp_header + self.udp_header = <udphdr*>data[iphdr_len:] if (ip_header.protocol == IPPROTO_ICMP): - icmp_header[0] = <icmphdr*>data[iphdr_len:] - - self.icmp_header = icmp_header + self.icmp_header = <icmphdr*>data[iphdr_len:] cdef void verdict(self, u_int32_t verdict): '''Call appropriate set_verdict... function on packet.'''