2017-09-17 4 views
1

Ich folge diesem Buch namens heftige Python und in CH5 geht es über ein Skript, um die MAC-Adresse eines iPhone Wifi Seite zu finden. Überprüfen Sie, ob Bluetooth aktiviert ist, indem Sie die letzten Bytes um eins erhöhen. Im Grunde finden Sie ein iPhone, das Bluetooth im versteckten Modus hat.Python scapy prn senden rcv Fehler

Ich bin verwirrt, warum das Skript Fehler so aus. Was kann ich tun, um diesen Fehler in Zukunft zu vermeiden?

Hier ist das Skript unter:

#!/usr/bin/python 
# -*- coding: utf-8 -*- 

from scapy.all import * 
from bluetooth import * 


def retBtAddr(addr): 
    btAddr=str(hex(int(addr.replace(':', ''), 16) + 1))[2:] 
    btAddr=btAddr[0:2]+":"+btAddr[2:4]+":"+btAddr[4:6]+":"+\ 
    btAddr[6:8]+":"+btAddr[8:10]+":"+btAddr[10:12] 
    return btAddr 

def checkBluetooth(btAddr): 
    btName = lookup_name(btAddr) 
    if btName: 
     print '[+] Detected Bluetooth Device: ' + btName 
    else: 
     print '[-] Failed to Detect Bluetooth Device.' 


def wifiPrint(pkt): 
    iPhone_OUI = 'd0:23:db' 
    if pkt.haslayer(Dot11): 
     wifiMAC = pkt.getlayer(Dot11).addr2 
     if iPhone_OUI == wifiMAC[:8]: 
      print '[*] Detected iPhone MAC: ' + wifiMAC 
      btAddr = retBtAddr(wifiMAC) 
      print '[+] Testing Bluetooth MAC: ' + btAddr 
      checkBluetooth(btAddr) 


conf.iface = 'wlan1mon' 
sniff(prn=wifiPrint) 

Fehlermeldung i erhalten:

sudo python 10-iphoneFinder.py 
Traceback (most recent call last): 
    File "10-iphoneFinder.py", line 34, in <module> 
    sniff(prn=wifiPrint) 
    File "/home/rb/.local/lib/python2.7/site-packages/scapy/sendrecv.py", line 620, in sniff 
    r = prn(p) 
    File "10-iphoneFinder.py", line 26, in wifiPrint 
    if iPhone_OUI == wifiMAC[:8]: 
TypeError: 'NoneType' object has no attribute '__getitem__' 

Antwort

0

In scapy, das addr2 Feld in der Dot11 Schicht ist ein bedingtes Feld, kann es so hat ein Wert von None, wenn das geschnüffelte Paket kein solches Feld hat.

Hier ist, wie wir die wifiPrint() Funktion schreiben konnte:

IPHONE_OUI = 'd0:23:db:' 

def wifiPrint(pkt): 
    if Dot11 in pkt: 
     wifiMAC = pkt[Dot11].addr2 
     if wifiMAC is not None and wifiMAC.startswith(IPHONE_OUI): 
      print '[*] Detected iPhone MAC: ' + wifiMAC 
      btAddr = retBtAddr(wifiMAC) 
      print '[+] Testing Bluetooth MAC: ' + btAddr 
      checkBluetooth(btAddr) 

Als Randbemerkung, wird das Skript nicht wirklich gut codiert, um es gelinde auszudrücken. Vielleicht ist es keine gute Idee Scapy (oder gar Python) daraus zu lernen.