Python scapy prn发送rcv错误

时间:2017-09-17 07:41:24

标签: python scapy

我正在关注这本名为“暴力蟒蛇”的书,在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__'

1 个答案:

答案 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)并不是一个好主意。