【问题标题】:Python Scapy sniff without root没有root的Python Scapy嗅探
【发布时间】:2016-03-25 06:36:11
【问题描述】:

我想知道是否有可能在没有 root 权限的情况下运行 Scapy 的 'sniff(...)'。

它用于捕获某些包的应用程序中。但我不想以 root 权限运行整个应用程序或更改 scapy 本身的任何内容。

提前致谢!

编辑:

为了测试,我使用以下代码:

from scapy.all import *

def arp_monitor_callback(pkt):
    if ARP in pkt and pkt[ARP].op in (1,2): #who-has or is-at
        return pkt.sprintf("%ARP.hwsrc% %ARP.psrc%")

sniff(prn=arp_monitor_callback, filter="arp", store=0)

我只能使用 sudo 运行它。

我尝试使用sudo setcap 'cap_net_admin=+eip' test.py 设置功能。但它没有显示任何效果。即使all 功能也无济于事。

【问题讨论】:

  • sniff() 需要设置混杂模式,因此功能 CAP_NET_ADMIN 应该足以让您的程序运行(参见 man capabilities(7))
  • 抱歉,但我对功能不是很熟悉:我是否必须将这些设置到我的脚本、scapy 库甚至其他地方?
  • 如果您希望普通用户在没有权限提升的情况下使用该程序(例如here),您可以使用 setcap(8) 作为 root 设置脚本功能。
  • 感谢您的指导,但没有引起任何反应。我添加了更多信息和我运行的测试。

标签: python-2.7 scapy sniffing linux-capabilities


【解决方案1】:

如果您希望能够以./test.py 的身份执行脚本,则需要为运行脚本的二进制文件设置功能,即:python 和 tcpdump:

setcap cap_net_raw=eip /usr/bin/pythonX.X
setcap cap_net_raw=eip /usr/bin/tcpdump

其中 X.X 是您用于运行脚本的 python 版本。

(请注意,您的系统上的路径可能不同)

请注意,这允许任何人在您的系统上打开原始套接字。

【讨论】:

  • 我刚刚在 virtualenv python 上尝试过,它也能正常工作。这对我来说感觉比为全局 python 命令做的更好。
【解决方案2】:

虽然@Jeff 提供的解决方案在技术上是正确的,但由于直接在 /usr/bin 中的二进制文件上设置文件功能,它的缺点是允许系统中的任何人打开原始套接字。

实现预期结果的另一种方法 - 仅使用 CAP_NET_RAW 运行脚本 - 是使用环境功能。这可以通过利用一个小型辅助二进制文件来完成,该二进制文件将环境功能和 exec() 设置到 python 解释器中。如需参考,请参阅this gist

使用参考实现,假设将适当的文件功能分配给./ambient

$ sudo setcap 'cap_net_raw=p' ambient

您的脚本将启动为:

$ ./ambient -c '13' /usr/bin/python ./test.py

请注意:

  • 13 是 CAP_NET_RAW 的整数值,根据 capability.h
  • 自内核 4.3 起提供环境功能
  • 您可以使用pscap 来验证进程是否在其有效集合中以所需的功能启动

为什么这种方法有效?

环境功能在 exec() 调用中被保留(因此传递给所有随后创建的子进程)并在它们的有效集合中被提升,例如由二进制文件调用的 python 解释器或由 python 脚本调用的 tcpdump。这当然是一种简化,有关能力集之间转换的完整描述,请参阅capabilities(7)

【讨论】:

  • 这非常适合我的 jupyter notebook 设置(py 3.6.5、scapy 2.4.3、jupyter core 4.5.0、jupyter-notebook : 6.0.1)
  • 它对我不起作用$ uname -r 4.4.224-1.el7.elrepo.x86_64 也许它需要其他特定版本的软件包?
猜你喜欢
  • 2015-12-22
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 2013-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多