From ceebb14ea865158d666feb130fcdd13dcb020445 Mon Sep 17 00:00:00 2001 From: AlxCzl Date: Sun, 27 Jan 2019 12:39:59 +0100 Subject: [PATCH] Migrated from iwconfig to iw --- wifite/tools/airmon.py | 14 +++++------ wifite/tools/iw.py | 53 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 60 insertions(+), 7 deletions(-) create mode 100755 wifite/tools/iw.py diff --git a/wifite/tools/airmon.py b/wifite/tools/airmon.py index a2a4538..37071bd 100755 --- a/wifite/tools/airmon.py +++ b/wifite/tools/airmon.py @@ -3,7 +3,7 @@ from .dependency import Dependency from .ifconfig import Ifconfig -from .iwconfig import Iwconfig +from .iw import Iw from ..util.process import Process from ..util.color import Color from ..util.input import raw_input @@ -114,7 +114,7 @@ class Airmon(Dependency): Fix for bad drivers like the rtl8812AU. ''' Ifconfig.down(iface) - Iwconfig.mode(iface, 'monitor') + Iw.mode(iface, 'monitor') Ifconfig.up(iface) # /sys/class/net/wlan0/type @@ -133,7 +133,7 @@ class Airmon(Dependency): Fix for bad drivers like the rtl8812AU. ''' Ifconfig.down(iface) - Iwconfig.mode(iface, 'managed') + Iw.mode(iface, 'managed') Ifconfig.up(iface) # /sys/class/net/wlan0/type @@ -182,17 +182,17 @@ class Airmon(Dependency): if enabled_iface is None: Color.pl('{R}failed{W}') - monitor_interfaces = Iwconfig.get_interfaces(mode='Monitor') + monitor_interfaces = Iw.get_interfaces(mode='monitor') # Assert that there is an interface in monitor mode if len(monitor_interfaces) == 0: Color.pl('{R}failed{W}') - raise Exception('Cannot find any interfaces in Mode:Monitor') + raise Exception('Cannot find any interfaces in monitor mode') # Assert that the interface enabled by airmon-ng is in monitor mode if enabled_iface not in monitor_interfaces: Color.pl('{R}failed{W}') - raise Exception('Cannot find %s with Mode:Monitor' % enabled_iface) + raise Exception('Cannot find %s with type:monitor' % enabled_iface) # No errors found; the device 'enabled_iface' was put into Mode:Monitor. Color.pl('{G}enabled {C}%s{W}' % enabled_iface) @@ -278,7 +278,7 @@ class Airmon(Dependency): Airmon.terminate_conflicting_processes() Color.p('\n{+} Looking for {C}wireless interfaces{W}...') - monitor_interfaces = Iwconfig.get_interfaces(mode='Monitor') + monitor_interfaces = Iw.get_interfaces(mode='monitor') if len(monitor_interfaces) == 1: # Assume we're using the device already in montior mode iface = monitor_interfaces[0] diff --git a/wifite/tools/iw.py b/wifite/tools/iw.py new file mode 100755 index 0000000..817c866 --- /dev/null +++ b/wifite/tools/iw.py @@ -0,0 +1,53 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from .dependency import Dependency + +class Iw(Dependency): + dependency_required = True + dependency_name = 'iw' + dependency_url = 'apt-get install iw' + + @classmethod + def mode(cls, iface, mode_name): + from ..util.process import Process + + pid = None + if mode_name == "monitor": + pid = Process(['iw', iface, 'set monitor control']) + else: + pid = Process(['iw', iface, 'type', mode_name]) + pid.wait() + + return pid.poll() + + @classmethod + def get_interfaces(cls, mode=None): + from ..util.process import Process + import re + + ireg = re.compile(r"\s+Interface\s[a-zA-Z0-9]+") + mreg = re.compile(r"\s+type\s[a-zA-z]+") + ires = None + mres = None + + interfaces = set() + iface = '' + + (out, err) = Process.call('iw dev') + if mode is None: + for line in out.split('\n'): + ires = ireg.search(line) + if ires: + interfaces.add(ires.group().split("Interface")[-1]) + else: + for line in out.split('\n'): + ires = ireg.search(line) + mres = mreg.search(line) + if mres: + if mode == mres.group().split("type")[-1][1:]: + interfaces.add(iface) + if ires: + iface = ires.group().split("Interface")[-1][1:] + + return list(interfaces)