From 21fa4486519d7f297ca2f069e2ed7d5dfaa0ae0f Mon Sep 17 00:00:00 2001 From: phil <phil@secdev.org> Date: Mon, 20 Mar 2017 15:33:40 +0100 Subject: [PATCH] Made TCPListenPipe queue messages until a client connects --- scapy/scapypipes.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/scapy/scapypipes.py b/scapy/scapypipes.py index 4924b0cb..6a4bd506 100644 --- a/scapy/scapypipes.py +++ b/scapy/scapypipes.py @@ -182,12 +182,18 @@ class TCPListenPipe(TCPConnectPipe): def __init__(self, addr="", port=0, name=None): TCPConnectPipe.__init__(self, addr, port, name) self.connected = False + self.q = Queue.Queue() def start(self): self.connected = False self.fd = socket.socket() self.fd.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) self.fd.bind((self.addr,self.port)) self.fd.listen(1) + def push(self, msg): + if self.connected: + self.fd.send(msg) + else: + self.q.put(msg) def deliver(self): if self.connected: self._send(self.fd.recv(65536)) @@ -197,6 +203,12 @@ class TCPListenPipe(TCPConnectPipe): self.fd.close() self.fd = fd self.connected = True + while True: + try: + self.fd.send(self.q.get(block=False)) + except Queue.Empty: + break + class TriggeredMessage(Drain): """Send a preloaded message when triggered and trigger in chain -- GitLab