diff --git a/scapy/arch/windows/__init__.py b/scapy/arch/windows/__init__.py index 6939a5336dd754d8b7edfc48ce9c8d39ed6da87a..c4860da46e8603308f4d820ef2da40309ac08a84 100755 --- a/scapy/arch/windows/__init__.py +++ b/scapy/arch/windows/__init__.py @@ -45,16 +45,18 @@ WINDOWS = True def _exec_query_ps(cmd, fields): """Execute a PowerShell query""" - ### XXX NOT TESTED AT ALL, WILL NOT WORK ps = sp.Popen([conf.prog.powershell] + cmd + ['|', 'select %s' % ', '.join(fields), '|', 'fl'], stdout=sp.PIPE, universal_newlines=True) - while True: - line = [ps.stdout.readline().split(':', 1)[1].strip() for _ in fields] - if not line[0]: - break - yield line + l=[] + for line in ps.stdout: + if not line.strip(): #skip empty lines + continue + l.append(line.split(':', 1)[1].strip()) + if len(l) == len(fields): + yield l + l=[] def _vbs_exec_code(code): tmpfile = tempfile.NamedTemporaryFile(suffix=".vbs", delete=False) @@ -72,7 +74,7 @@ def _vbs_exec_code(code): def _vbs_get_iface_guid(devid): try: - # devid = str(int(devid) + 1) + devid = str(int(devid) + 1) guid = _vbs_exec_code("""WScript.Echo CreateObject("WScript.Shell").RegRead("HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\NetworkCards\\%s\\ServiceName") """ % devid).__iter__().next() if guid.startswith('{') and guid.endswith('}\n'): @@ -347,11 +349,10 @@ pcapdnet.open_pcap = lambda iface,*args,**kargs: _orig_open_pcap(pcapname(iface) _orig_get_if_raw_hwaddr = pcapdnet.get_if_raw_hwaddr pcapdnet.get_if_raw_hwaddr = lambda iface, *args, **kargs: ( - ARPHDR_ETHER, IFACES[iface].mac.replace(':', '').decode('hex') + ARPHDR_ETHER, IFACES.dev_from_pcapname(iface.pcap_name).mac.replace(':', '').decode('hex') ) get_if_raw_hwaddr = pcapdnet.get_if_raw_hwaddr - def read_routes_xp(): # The InterfaceIndex in Win32_IP4RouteTable does not match the # InterfaceIndex in Win32_NetworkAdapter under some platforms @@ -663,7 +664,7 @@ def get_working_if(): try: # return the interface associated with the route with smallest # mask (route by default if it exists) - return min(read_routes(), key=lambda x: x[1])[2] + return min(read_routes(), key=lambda x: x[1])[3] except ValueError: # no route return LOOPBACK_NAME