diff --git a/scapy/arch/windows/compatibility.py b/scapy/arch/windows/compatibility.py index 573d64c41f208c758272a52a2f507e9b30a59a4f..6c0b3aefcff5c8ea0f62bbed43620a9ef567b392 100644 --- a/scapy/arch/windows/compatibility.py +++ b/scapy/arch/windows/compatibility.py @@ -19,7 +19,7 @@ from scapy.arch.consts import LOOPBACK_NAME from scapy.config import conf,ConfClass from scapy.base_classes import Gen, SetGen import scapy.plist as plist -from scapy.utils import PcapReader +from scapy.utils import PcapReader, tcpdump from scapy.arch.pcapdnet import PcapTimeoutElapsed from scapy.error import log_runtime from scapy.data import MTU, ETH_P_ARP,ETH_P_ALL @@ -197,24 +197,8 @@ L2socket: use the provided L2socket s = L2socket(type=ETH_P_ALL, *arg, **karg) else: flt = karg.get('filter') - if flt is not None: - if isinstance(offline, basestring): - s = PcapReader( - subprocess.Popen( - [conf.prog.tcpdump, "-r", offline, "-w", "-", flt], - stdout=subprocess.PIPE - ).stdout - ) - else: - s = PcapReader( - subprocess.Popen( - [conf.prog.tcpdump, "-r", "-", "-w", "-", flt], - stdin=offline, - stdout=subprocess.PIPE - ).stdout - ) - else: - s = PcapReader(offline) + s = PcapReader(offline if flt is None else + tcpdump(offline, args=["-w", "-", flt], getfd=True)) lst = [] if timeout is not None: stoptime = time.time()+timeout diff --git a/scapy/sendrecv.py b/scapy/sendrecv.py index 9ca7d48057e43f1a8c60714f8f6f2e8bd40e8456..308c114d2fd1b4484afb703d84774f99f4cf7b2a 100644 --- a/scapy/sendrecv.py +++ b/scapy/sendrecv.py @@ -16,7 +16,7 @@ from scapy.arch.consts import DARWIN, FREEBSD, OPENBSD from scapy.data import * from scapy.config import conf from scapy.packet import Gen -from scapy.utils import warning,get_temp_file,PcapReader,wrpcap +from scapy.utils import warning, get_temp_file, PcapReader, tcpdump, wrpcap from scapy import plist from scapy.error import log_runtime,log_interactive from scapy.base_classes import SetGen @@ -607,29 +607,10 @@ interfaces) **karg)] else: flt = karg.get('filter') - if flt is not None: - if isinstance(offline, basestring): - sniff_sockets = [ - PcapReader( - subprocess.Popen( - [conf.prog.tcpdump, "-r", offline, "-w", "-", - flt], - stdout=subprocess.PIPE - ).stdout - ) - ] - else: - sniff_sockets = [ - PcapReader( - subprocess.Popen( - [conf.prog.tcpdump, "-r", "-", "-w", "-", flt], - stdin=offline, - stdout=subprocess.PIPE - ).stdout - ) - ] - else: - sniff_sockets = [PcapReader(offline)] + sniff_sockets = [PcapReader( + offline if flt is None else + tcpdump(offline, args=["-w", "-", flt], getfd=True) + )] lst = [] if timeout is not None: stoptime = time.time()+timeout diff --git a/scapy/utils.py b/scapy/utils.py index ad5230e033ac0744cbbdbb88d8bebacc0eea768b..b26faf05effcbf7e09bd40c2fe37d5ce52592774 100644 --- a/scapy/utils.py +++ b/scapy/utils.py @@ -1164,10 +1164,7 @@ u'64' stdout=subprocess.PIPE if dump or getfd else None, stderr=open(os.devnull), ) - def newdel(self, *args, **kargs): - os.unlink(tmpfile.name) - proc.__del__(self, *args, **kargs) - proc.__del__ = newdel + conf.temp_files.append(tmpfile.name) else: proc = subprocess.Popen( [conf.prog.tcpdump if prog is None else prog, "-r", "-"]