From f93cddc5f0a325314c8a0325aa2bc7aee410c54c Mon Sep 17 00:00:00 2001 From: dowright Date: Tue, 24 Aug 2021 19:35:56 -0700 Subject: [PATCH] work on new packet --- new_packet.pxd | 3 ++- new_packet.pyx | 21 +++++++++------------ 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/new_packet.pxd b/new_packet.pxd index 3409240..2ecd7f7 100644 --- a/new_packet.pxd +++ b/new_packet.pxd @@ -184,13 +184,14 @@ cdef class CPacket: cdef udphdr *udp_header cdef icmphdr *icmp_header + cdef u_int8_t cmbhdr_len + cdef bint _verdict_is_set cdef u_int32_t _mark # Packet details: cdef Py_ssize_t data_len cdef readonly unsigned char *data - cdef unsigned char *payload cdef timeval timestamp cdef u_int8_t hw_addr[8] diff --git a/new_packet.pyx b/new_packet.pyx index 15ccb19..70c44f8 100644 --- a/new_packet.pyx +++ b/new_packet.pyx @@ -100,25 +100,22 @@ cdef class CPacket: cdef u_int8_t tcphdr_len cdef u_int8_t udphdr_len - cdef u_int8_t cmbhdr_len if (self.ip_header.protocol == IPPROTO_TCP): self.tcp_header = self.data[iphdr_len] tcphdr_len = (self.tcp_header.th_off & 15) * 4 - cmbhdr_len = iphdr_len + tcphdr_len - self.payload = self.data[cmbhdr_len:] + self.cmbhdr_len = iphdr_len + tcphdr_len elif (self.ip_header.protocol == IPPROTO_UDP): self.udp_header = self.data[iphdr_len] udphdr_len = 8 - cmbhdr_len = iphdr_len + udphdr_len - self.payload = self.data[cmbhdr_len:] + self.cmbhdr_len = iphdr_len + udphdr_len elif (self.ip_header.protocol == IPPROTO_ICMP): @@ -172,7 +169,7 @@ cdef class CPacket: cdef tuple proto_header - if (ip_header.protocol == IPPROTO_TCP): + if (self.ip_header.protocol == IPPROTO_TCP): proto_header = ( ntohs(self.tcp_header.th_sport), @@ -188,7 +185,7 @@ cdef class CPacket: self.tcp_header.th_urp ) - elif (ip_header.protocol == IPPROTO_UDP): + elif (self.ip_header.protocol == IPPROTO_UDP): proto_header = ( ntohs(self.udp_header.uh_sport), @@ -197,7 +194,7 @@ cdef class CPacket: ntohs(self.udp_header.uh_sum), ) - elif (ip_header.protocol == IPPROTO_ICMP): + elif (self.ip_header.protocol == IPPROTO_ICMP): proto_header = ( self.icmp_header.type, @@ -208,11 +205,11 @@ cdef class CPacket: def get_payload(self): '''Return payload as Python bytes.''' - # cdef object payload - # - # payload = self.payload + cdef object payload - return self.payload + payload = self.data[self.cmbhdr_len:self.data_len] + + return payload # def _before_exit(self): # '''executes before returning from parse call.