在 Raspberrypi (Systemd) 中重新启动时使用 scapy 嗅探

Using scapy sniff on reboot in Raspberrypi (Systemd)

TL;DR:为什么 Scapy 的嗅探器在从 systemd 重新启动时没有 运行?

我的 RPI3 上有以下代码 运行ning,专门用于查找网络请求。这使用内置的 ETH0 wifi:

monitorConnections.py

def arp_detect(pkt):

    print("Starting ARP detect")
    logging.debug('Starting ARP detect')

    if pkt.haslayer(ARP):


        if pkt[ARP].op == 1: #network request
            PHONE_name = "Unknown"
            PHONE_mac_address = ""

            if pkt[ARP].hwsrc in known_devices.keys():
                print ("Known Phone Detected")
                logging.debug('Known Phone Detected')

                # Grab name and mac address
                PHONE_mac_address = pkt[ARP].hwsrc
                PHONE_name = known_devices[PHONE_mac_address]

                print ('Hello ' + PHONE_name)
                logging.debug('Hello ' + PHONE_name)

            else:
                # Grab mac address, log these locally

                print ("Unknown Phone Detected")
                logging.debug('Unknown Phone Detected')

                PHONE_mac_address = pkt[ARP].hwsrc

        print (pkt[ARP].hwsrc)

print("Start!")
print (sniff(prn=arp_detect, filter="arp", store=0))

当我运行通过命令

python2 monitorConnections.py

这 运行 是设计的,但是我一直在尝试将其放入守护程序中,意识到它需要 运行 在建立互联网连接后。我的服务中有以下设置:

MonitorConnections.service

[Unit]
Description=Monitor Connections
Wants=network-online.target
After=network.target network-online.target sys-subsystem-net-devices-wlan0.device sys-subsystem-net-devices-eth0.device

[Service]
Type=simple
ExecStart=/usr/bin/python2 -u monitorConnections.py
ExecStop=pkill -9 /usr/bin/autossh
WorkingDirectory=/home/pi/Shared/MonitorPhones
Restart=always
User=root

StandardOutput=console
StandardError=console

[Install]
WantedBy=multi-user.target

为了在 运行 之后找到我需要我的脚本的服务,我 运行 这个命令:

systemctl list-units --no-pager

在 'After' 下找到以下服务添加到我的服务中 - 这些与以太网相对应 服务(我想!)

sys-subsystem-net-devices-wlan0.device
sys-subsystem-net-devices-eth0.device

据我所知,这是 运行ning 成功了。当我保存所有内容和 运行 以下内容时:

sudo systemctl daemon-reload
sudo systemctl restart monitorConnections

脚本的启动非常漂亮。然后我在重新启动时将脚本设置为 运行,如下所示:

sudo systemctl enable monitorConnections

然后重新启动,我可以看到它 运行 是打印语句 "Start",但是 运行 在 'sniff' 命令中似乎没有任何内容,但是当运行宁

sudo systemctl -l status monitorConnections

我可以看到脚本处于活动状态 - 所以它没有出错!

我的问题:为什么 scapy 的 sniff 在重启时似乎没有 运行?我错过了什么吗

老实说,我对出了什么问题一头雾水 - 非常感谢任何对此的帮助!

RPI3的wifi驱动没有监听模式。经过数周的调试,这被缩小为问题所在。我希望这对其他人有帮助。