mirror of
https://github.com/OpenSolo/OpenSolo.git
synced 2025-04-30 06:34:38 +02:00
120 lines
2.8 KiB
Python
120 lines
2.8 KiB
Python
|
|
import re
|
|
import subprocess
|
|
|
|
|
|
# Expected output:
|
|
#
|
|
# $ iw dev wlan0 link
|
|
# Connected to d4:d7:48:81:68:a0 (on wlan0)
|
|
# SSID: 3DRobotics
|
|
# freq: 2447
|
|
# RX: 5779050 bytes (38689 packets)
|
|
# TX: 13885 bytes (73 packets)
|
|
# signal: -37 dBm
|
|
# tx bitrate: 48.0 MBit/s
|
|
#
|
|
# bss flags: short-preamble short-slot-time
|
|
# dtim period: 0
|
|
# beacon int: 85
|
|
# Returns dictionary of information
|
|
|
|
def link(ifName):
|
|
|
|
info = { 'mac' : None,
|
|
'ssid' : None,
|
|
'freq' : None,
|
|
'rxBytes' : None,
|
|
'rxPackets' : None,
|
|
'txBytes' : None,
|
|
'txPackets' : None,
|
|
'signal' : None,
|
|
'txBitrate' : None }
|
|
|
|
try:
|
|
iwOut = subprocess.check_output(['iw', 'dev', ifName, 'link'],
|
|
stderr=subprocess.STDOUT)
|
|
except:
|
|
return info
|
|
|
|
m = re.search("Connected to (.*?)\s", iwOut)
|
|
if m:
|
|
info['mac'] = m.group(1)
|
|
|
|
m = re.search('SSID: (.*)\s', iwOut)
|
|
if m:
|
|
info['ssid'] = m.group(1)
|
|
|
|
m = re.search('freq: ([0-9]+)\s', iwOut)
|
|
if m:
|
|
info['freq'] = int(m.group(1))
|
|
|
|
m = re.search('RX: ([0-9]+) bytes \(([0-9]+) packets\)\s', iwOut)
|
|
if m:
|
|
info['rxBytes'] = int(m.group(1))
|
|
info['rxPackets'] = int(m.group(2))
|
|
|
|
m = re.search('TX: ([0-9]+) bytes \(([0-9]+) packets\)\s', iwOut)
|
|
if m:
|
|
info['txBytes'] = int(m.group(1))
|
|
info['txPackets'] = int(m.group(2))
|
|
|
|
m = re.search('signal: (-[0-9]+) dBm\s', iwOut)
|
|
if m:
|
|
info['signal'] = int(m.group(1))
|
|
|
|
m = re.search('tx bitrate: ([0-9]+\.[0-9]+) MBit', iwOut)
|
|
if m:
|
|
info['txBitrate'] = float(m.group(1))
|
|
|
|
return info
|
|
|
|
|
|
# returns frequency in MHz (or None)
|
|
def getFreq(ifName):
|
|
info = link(ifName)
|
|
return info['freq']
|
|
|
|
|
|
# Expected output:
|
|
#
|
|
# $ iw dev wlan0 info
|
|
# Interface wlan0
|
|
# ifindex 3
|
|
# wdev 0x1
|
|
# addr 00:02:60:51:90:06
|
|
# ssid SoloLink
|
|
# type AP
|
|
# wiphy 0
|
|
# channel 8 (2447 MHz), width: 20 MHz, center1: 2447 MHz
|
|
|
|
def getChan(ifName):
|
|
try:
|
|
iwOut = subprocess.check_output(['iw', 'dev', ifName, 'info'],
|
|
stderr=subprocess.STDOUT)
|
|
except:
|
|
return None
|
|
m = re.search('channel ([0-9]+)\s', iwOut)
|
|
if m:
|
|
return int(m.group(1))
|
|
return None
|
|
|
|
|
|
map = [(1, 2412), (2, 2417), (3, 2422), (4, 2427), (5, 2432),
|
|
(6, 2437), (7, 2442), (8, 2447), (9, 2452), (10, 2457),
|
|
(11, 2462), (12, 2467), (13, 2472), (14, 2484)]
|
|
|
|
|
|
def freqToChan(freq):
|
|
for m in map:
|
|
if freq == m[1]:
|
|
return m[0]
|
|
return None
|
|
|
|
|
|
def chanToFreq(chan):
|
|
for m in map:
|
|
if chan == m[0]:
|
|
return m[1]
|
|
return None
|