0

我正在使用 scapy 用 python 编写一个简单的网络扫描仪,下面是我的代码:

import scapy.all as scapy



def scan(ip):
    scapy.arping(ip)

scan("192.168.1.1/24")

我得到的错误:

Traceback (most recent call last):
  File "ipScanner.py", line 10, in <module>
    scan("192.168.1.1/24")
  File "ipScanner.py", line 8, in scan
    scapy.arping(ip)
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/layers/l2.py", line 648, in arping
    filter="arp and arp[7] = 2", timeout=timeout, iface_hint=net, **kargs)  # noqa: E501
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/sendrecv.py", line 553, in srp
    filter=filter, nofilter=nofilter, type=type)
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 242, in __init__
    super(L2bpfListenSocket, self).__init__(*args, **kwargs)
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 62, in __init__
    (self.ins, self.dev_bpf) = get_dev_bpf()
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/arch/bpf/core.py", line 114, in get_dev_bpf
    raise Scapy_Exception("No /dev/bpf handle is available !")
scapy.error.Scapy_Exception: No /dev/bpf handle is available !
Exception ignored in: <function _L2bpfSocket.__del__ at 0x105984c20>
Traceback (most recent call last):
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 139, in __del__
    self.close()
  File "/Users/omairkhan/opt/anaconda3/lib/python3.7/site-packages/scapy/arch/bpf/supersocket.py", line 211, in close
    if not self.closed and self.ins is not None:
AttributeError: 'L2bpfSocket' object has no attribute 'ins'

任何人都可以帮助理解它。注意:我在 mac OS 上运行它。

4

1 回答 1

-1

当我第一次使用匹配的语法开始编程时,我编写了这个确切的程序,并且当以管理员身份运行时,它在我的系统上正确运行。我在 Linux 和 Windows 而不是 Mac 上开发,但我会尽我所能。

您是通过 IDE 运行此脚本还是从 shell 调用它?

我建议只从 shell 运行它。这只是让您可以更好地控制文件,例如指定脚本的 python 版本,如果您需要脚本的管理权限,您可以在 shell 中提升脚本权限。另外,在我的操作系统中,我被教导要始终使用,并且经历过忘记这一点的错误,请始终添加:

#!/usr/bin/env python

作为每个脚本的第一行。至少在 Linux 中,它告诉 PC 如何处理该文件(它告诉它将该文件视为 python 文件——是的,我承认它已经将它作为 python 运行)。我会检查这是否对 MacOS 文件系统有效。

到目前为止,我推荐的大部分内容都归结为没有/dev/bpf可用的句柄,只有当我不以管理员身份运行脚本时(尽管 Linux 声明权限被拒绝),这对我来说才是一个问题。而且我不应该忽略过去在 Windows 上使用 Anaconda(在我了解文件系统的结构之前)阻止我使用 pygame 和 scapy 等常见模块。我只能猜测在这种情况下,Anaconda 阻止 PC 知道在哪里可以找到该模块的每个部分,因为它使计算机认为它在 Anaconda 目录下有自己的一个模块,而它位于不同的 PATH 中。

于 2021-03-15T04:08:35.630 回答