Die Funktion
# ######################################################################
# Eine Klasse, um mit dem kismet_server zu kommunizieren.
class KismetSrv():
def __init__(self, address=("127.0.0.1", 2501)):
self.data=socket.create_connection(address).makefile("w", 1)
self.cmdnr=0
self.setup()
# ######################################################################
# Dem kismet_server sagen, welche Infos er senden soll.
def setup(self):
self.sendCmd("ENABLE BSSID bssid,signal_dbm")
self.__getData()
self.sendCmd("ENABLE SSID mac,ssid")
# ######################################################################
# Das Kommando "cmd" mit vorangestellter fortlaufender Nummer an den
# kismet_server senden.
def sendCmd(self, cmd):
snd="!%d %s\n"%(self.cmdnr, cmd)
self.data.write(snd)
self.cmdnr+=1
# ######################################################################
# Verfügbare Zeilen vom kismet_server lesen und als Liste zurückliefern.
def __getData(self):
lns=self.data.readline().rstrip("\n").split("\x01")
return(lns)
# ######################################################################
# Liefert die letzten beim kismet_server verfügbaren Zeilen, deren
# erste Zeile mit "prefix" beginnt. Andere Zeilen werden überlesen.
def __getDataWithPrefix(self, prefix):
lns=["-"]
while not lns[0].startswith(prefix):
lns=self.__getData()
return(lns)
# ######################################################################
# Liefert die letzt-verfügbare BSSID + AccessPoint-Namen mit Dämpfung
# vom kismet_server oder "", wenn ein Fehler aufgetreten ist.
def getAccessPointInfo(self):
ln1=self.__getDataWithPrefix("*BSSID:") # ['*BSSID: B8:27:EB:65:BA:64 -17 ']
ln2=self.__getDataWithPrefix("*SSID:") # ['*SSID: B8:27:EB:65:BA:64 ', 'RaspAP', ' ']
try:
if ln1[0].startswith("*BSSID:") and ln2[0].startswith("*SSID:"):
bssid=ln1[0].split() # ['*BSSID:', 'B8:27:EB:65:BA:64', '-17']
ssid=ln2[0].split() # ['*SSID:', 'B8:27:EB:65:BA:64']
if ln2[1]!="" and bssid[1]==ssid[1]:
return(bssid[1], ln2[1], bssid[2]) # ('B8:27:EB:65:BA:64', 'RaspAP', '-17')
except:
pass
return("")
getAccessPointInfo()
liefert jeweils
einen AccessPoint-Namen und dessen dbm-Wert. Diese Infos müssen nun
kontinuierlich gelesen und gesammelt werden. Immer wenn die WebSeite
anfragt, werden die gesammelten AP-Namen samt Dämpungs-Wert-Liste an
die WebSeite bzw. status.py3 übergeben und danach die Sammlung
gelöscht.
# RaspAP nicht aufzeichnen
filter_tracker=BSSID(!B8:27:EB:65:BA:64)
# RaspAP nicht aufzeichnen
filter_tracker=BSSID(!B8:27:EB:65:BA:64,!B8:27:EB:18:9B:07)
lat |
11.1194926639 [m] |
lon |
6.40882864108 [m] |
lat |
1.11194926589 [m] |
lon |
0.640882863996 [m] |
lat_n-0.00002 | <= |
lat_a |
<= |
lat_n+0.00002 | |
AND |
lon_n-0.00003 | <= |
lon_a |
<= |
lon_n+0.00003 |
last_seen IS NULL
und 7.623 Sätze mit last_seen IS NOT NULL
. last_seen IS NULL OR last_seen<"2016-08-18"
20.289 Sätze, last_seen<"2016-08-18"
hingegen nur
226 Sätze und last_seen>"2016-08-18"
7.397 Sätze.der Abschnitt:
/lib/udev/rules.d/75-persistent-net-generator.rules
zu suchen und zu ändern auf: (hier eine der diesbezüglich gesichteten Quellen)
# device name whitelist
KERNEL!="ath*|msh*|ra*|sta*|ctc*|lcs*|hsi*", \
GOTO="persistent_net_generator_end"
Danach ist der RasPi3 ohne den WLAN-Stick zu rebooten.
# device name whitelist
KERNEL!="wlan*|ath*|msh*|ra*|sta*|ctc*|lcs*|hsi*", \
GOTO="persistent_net_generator_end"
...und damit quasi Interface-Namen für MAC-Adressen reserviert werden.
dede@rp3-1:~ $ cat /etc/udev/rules.d/70-persistent-net.rules
# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.
# Unknown net device (/devices/platform/soc/3f300000.mmc/mmc_host/mmc1/mmc1:0001/mmc1:0001:1/net/wlan0) (brcmfmac_sdio)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="b8:27:eb:65:ba:64", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan0"
# USB device 0x:0x (rt2800usb)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:19:86:81:21:26", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="wlan*", NAME="wlan1"
Konfig-Datei |
Interface-Name |
Funktion |
/etc/network/interfaces |
wlan0 (onboard) |
Kommunikation mit dem Smartphone |
/etc/dnsmasq.conf |
wlan0 (onboard) | Kommunikation mit dem Smartphone |
/etc/hostapd/hostapd.conf |
wlan0 (onboard) | Kommunikation mit dem Smartphone |
/usr/local/etc/kismet.conf |
wlan1 (USB-Stick) |
Nach WLANs schnuppern |
Alles weitere wird über die Button auf der Webseite zugeschaltet, die ihrerseits Aufträge an GPS_tracker.py erstellen.
@reboot /usr/bin/python /home/dede/bin/GPS_tracker.py
ip
over bluetooth
zu befragen - um dann schließlich beim
Suchbegriff android raspberry pi 3 usb
zu landen.
Dabei bin ich auf diese
Seite gestoßen, in der beschrieben wird, wie ein Raspberry Pi
über ein USB-Kabel IP mit einem Smartphone spricht und dieses damit
als Display nutzt./etc/network/interfaces
:Nachdem dann ein Smartphone per USB-Kabel an den RasPi angeschlossen und auf diesem "USB-Tethering" aktiviert wird, kann die Seite
auto usb0
allow-hotplug usb0
iface usb0 inet static
address 192.168.42.180
netmask 255.255.255.0
network 192.168.42.0
broadcast 192.168.4.255
mit einem Webbrowser geöffnet werden.
http://192.168.42.180/cgi-bin/status.py3
meldet.
cgi.escape(os.environ["REMOTE_ADDR"])
Zeilen gesamt | 118.341 |
RaspAP-MAC-Adresse | 8.884 |
Smartphone-MAC-Adresse |
1.350 |
GP:SD:TR:AC:KL:OG-Sätze |
9.069 |
/usr/local/etc/kismet.conf
habe ich eine Zeile
geändert:...wobei das "name=..." nicht zwingend notwendig ist.
ncsource=wlan1:name=AlfaAWUS036H
<card-name>AlfaAWUS036H</card-name>
eingetragen.wlan1
drin.
Daher: reine Kosmetik.raspberry pi 3 usb too much
power
befragt und bin nach ein oder zwei Zwischenstationen
auf dieser
Seite gelandet. Das entscheidende Keyword ist max_usb_current=1
(in der /boot/config.txt
).sudo nano
/boot/config.txt
und den Parameter hinten anhängen:Nebenbei habe ich dem RasPi noch das Audio abgedreht. Das brauche ich nicht und es kostet höchstens Strom.
#dtparam=audio=on
max_usb_current=1
/boot/config.txt
.
Jetzt somit:Konsequenterweise sollte der BlueTooth-Systemdienst nun noch (per rcconf) deaktiviert werden.
#dtparam=audio=on
max_usb_current=1
dtoverlay=pi3-disable-bt