Example #1
0
    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)
            ]),
        }
Example #2
0
 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)
         )
Example #3
0
 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
Example #4
0
 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
Example #5
0
 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