我正在关注这本名为“暴力蟒蛇”的书,在CH5中,它会编写一个脚本来查找iphone wifi端的mac地址。通过将最后一个字节递增一来检查蓝牙是否打开。基本上找到一个隐藏模式的蓝牙iphone。
我很困惑为什么脚本会出错。我可以做些什么来防止将来出现此错误?
以下是以下脚本:
#!/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)
我收到的错误讯息:
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__'
答案 0 :(得分:0)
在Scapy中,addr2
图层中的Dot11
字段是一个条件字段,因此当嗅探的数据包没有此类字段时,它可能具有值None
。
以下是我们如何编写wifiPrint()
函数:
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)
作为旁注,至少可以说,脚本编码不是很好。也许从中学习Scapy(甚至是Python)并不是一个好主意。