我想嗅探无线网络中的信标帧。我安装了scapy
并将它设置wlan0
为监控模式。然后在终端中,
-
- 我输入Scapy命令来打开scapy。
- 然后在 Scapy 中我输入:
conf.iface="wlan0"
- 然后我使用 sniff 命令如下:
p=sniff(count=1)
但它给了我错误:
Traceback (most recent call last): File "<console>", line 1, in <module> File "/usr/local/lib/python2.7/dist-packages/scapy/sendrecv.py", line 561, in sniff s = L2socket(type=ETH_P_ALL, *arg, **karg) File "/usr/local/lib/python2.7/dist-packages/scapy/arch/linux.py", line 459, in __init__ self.ins = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(type)) File "/usr/lib/python2.7/socket.py", line 191, in __init__ _sock = _realsocket(family, type, proto) error: [Errno 1] Operation not permitted
请帮帮我。我正在尝试使用 scapy 检测来自网络的信标帧。另外请告诉我我应该将什么作为过滤器放入以仅捕获信标帧。
答案1
#!/usr/bin/env python
from scapy.all import *
ap_list = []
def myPacketHandler(pkt) :
if pkt.haslayer(Dot11) :
#type 0 = Management subtype 4 = Beacon
if pkt.type == 0 and pkt.subtype == 8 :
if pkt.addr2 not in ap_list :
ap_list.append(pkt.addr2)
print "AP MAX: %s with SSID: %s" % (pkt.addr2, pkt.info)
sniff(iface="mon0", prn = myPacketHandler, store=0)
编辑(500 个信标后退出 - 可以是相同的信标):
#!/usr/bin/env python
from scapy.all import *
import sys
ap_list = []
d = {'counter' : 0}
def myPacketHandler(pkt) :
if pkt.haslayer(Dot11) :
#type 0 = Management subtype 4 = Beacon
if pkt.type == 0 and pkt.subtype == 8 :
d['counter'] += 1
if d['counter']>500:
sys.exit()
if pkt.addr2 not in ap_list :
ap_list.append(pkt.addr2)
print "AP MAX: %s with SSID: %s" % (pkt.addr2, pkt.info)
sniff(iface="mon0", prn = myPacketHandler, store=0)
答案2
我刚刚意识到我没有以管理员身份 (sudo) 使用 scapy。我再次使用 sudo 运行 scapy,它成功了。发布答案以帮助遇到类似问题的任何人。
但我仍然不知道该用什么作为过滤器。