def next_packet(self): header = ctypes.POINTER(winpcapy.pcap_pkthdr)() pkt_data = ctypes.POINTER(ctypes.c_ubyte)() res = winpcapy.pcap_next_ex( self._fp, ctypes.byref(header), ctypes.byref(pkt_data), ) if(res == -1): raise RuntimeError( 'pcap_next_ex failed: ' % winpcapy.pcap_geterr(self._fp) ) if res == 0: return None return { 'header': { 'timestamp': ( datetime.datetime.utcfromtimestamp( header.contents.ts.tv_sec ) + datetime.timedelta( microseconds=header.contents.ts.tv_usec, ) ), 'caplen': header.contents.caplen, 'len': header.contents.len, }, 'data': bytearray(pkt_data[ :min(header.contents.caplen, header.contents.len) ]), }
def send_packet(self, data): b = bytearray(data) packet = (ctypes.c_ubyte * len(b))(*b) if (winpcapy.pcap_sendpacket(self._fp, packet, len(b)) != 0): raise RuntimeError( 'pcap_sendpacket failed: ' % winpcapy.pcap_geterr(self._fp) )
def PcapSend(self): from winpcapy import pcap_sendpacket,pcap_geterr self.Buffer = binascii.a2b_hex(self.MAC_Dst+self.MAC_Src+self.Eth_Typ) + self.Buffer print(binascii.b2a_hex(self.Buffer)) if pcap_sendpacket(self.Pcap_t,cast(self.Buffer,POINTER(c_ubyte)),len(self.Buffer)) == 0: return True else: print ("Error sending the packet: %s" % pcap_geterr(self.Pcap_t)) return False
def recvfrom(self, bufsize): # retrieve a packet from pcap header = ctypes.POINTER(capy.pcap_pkthdr)() pkt_data = ctypes.POINTER(ctypes.c_ubyte)() status = capy.pcap_next_ex(self._fp, ctypes.byref(header), ctypes.byref(pkt_data)) if status == 0: # timeout return False elif status > 0: # interpret captured packet pkt_len = header.contents.caplen pkt_buf = ctypes.string_at(pkt_data, pkt_len) pkt = dpkt.ethernet.Ethernet(pkt_buf) return (pkt_buf, pkt.src) else: # some error occured raise ("error capturing packets: %s" % capy.pcap_geterr(self._fp)) pass
def recvfrom(self, bufsize): # retrieve a packet from pcap header = ctypes.POINTER(capy.pcap_pkthdr)() pkt_data = ctypes.POINTER(ctypes.c_ubyte)() status = capy.pcap_next_ex(self._fp, ctypes.byref(header), ctypes.byref(pkt_data)) if (status == 0): # timeout return False elif (status > 0): # interpret captured packet pkt_len = header.contents.caplen pkt_buf = ctypes.string_at(pkt_data, pkt_len) pkt = dpkt.ethernet.Ethernet(pkt_buf) return (pkt_buf, pkt.src) else: # some error occured raise ('error capturing packets: %s' % capy.pcap_geterr(self._fp)) pass