54 lines
1.5 KiB
Python
Executable File
54 lines
1.5 KiB
Python
Executable File
#!/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)
|