diff --git a/scapy.py b/scapy.py index 1b10e04a04214af3d355aef18c6ba0cb524c3781..4aa086a99e0f5f3c827aa79cce02733222e6da4d 100755 --- a/scapy.py +++ b/scapy.py @@ -9217,6 +9217,15 @@ L3Types = { ETH_P_IP : IP, } +def flush_fd(fd): + if type(fd) is not int: + fd = fd.fileno() + while 1: + r,w,e = select([fd],[],[],0) + if r: + os.read(fd,MTU) + else: + break class SuperSocket: closed=0 @@ -9265,6 +9274,7 @@ class L3PacketSocket(SuperSocket): self.type = type self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) self.ins.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 0) + flush_fd(self.ins) if not nofilter: if conf.except_filter: if filter: @@ -9357,6 +9367,7 @@ class L2Socket(SuperSocket): iface = conf.iface self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) self.ins.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 0) + flush_fd(self.ins) if not nofilter: if conf.except_filter: if filter: @@ -9399,6 +9410,7 @@ class L2ListenSocket(SuperSocket): self.outs = None self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) self.ins.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 0) + flush_fd(self.ins) if iface is not None: self.ins.bind((iface, type)) if not nofilter: