def sr(self, packets, timeout=None, *arg, **kw): """ Wrapper around scapy.sendrecv.sr for sending and receiving of packets at layer 3. """ scapySender = ScapySender(timeout=timeout) config.scapyFactory.registerProtocol(scapySender) log.debug("Using sending with hash %s" % scapySender.__hash__) d = scapySender.startSending(packets) d.addCallback(self.finishedSendReceive) return d
def sr1(self, packets, *arg, **kw): def done(packets): """ We do this so that the returned value is only the one packet that we expected a response for, identical to the scapy implementation of sr1. """ try: return packets[0][0][1] except IndexError: log.err("Got no response...") return packets scapySender = ScapySender() scapySender.expected_answers = 1 config.scapyFactory.registerProtocol(scapySender) log.debug("Running sr1") d = scapySender.startSending(packets) log.debug("Started to send") d.addCallback(self.finishedSendReceive) d.addCallback(done) return d
def send(self, packets, *arg, **kw): """ Wrapper around scapy.sendrecv.send for sending of packets at layer 3 """ scapySender = ScapySender() config.scapyFactory.registerProtocol(scapySender) scapySender.startSending(packets) scapySender.stopSending() for sent_packet in packets: self.report['sent_packets'].append(representPacket(sent_packet))