Использование scapy sniff при перезагрузке в Raspberrypi (Systemd) - PullRequest
0 голосов
/ 12 апреля 2020

TL; DR: Почему анализатор Scapy не запускается при перезагрузках из systemd?

У меня на RPI3 работает следующий код, который специально ищет сетевые запросы. Это использует встроенный ETH0 Wi-Fi:

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

Это работает как спроектирован, однако я пытался поместить это в демон, сознавая, что он должен работать после того, как будет установлено соединение inte rnet. У меня есть следующие настройки в моем сервисе:

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

Чтобы найти следующие сервисы для добавления в мой сервис в разделе «После» - эти corponpond с сервисами ethe rnet (я представляю!)

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

Насколько я могу судить, это успешно работает. Когда я сохраняю все и запускаю следующее:

sudo systemctl daemon-reload
sudo systemctl restart monitorConnections

Это прекрасно запускает сценарий. Затем я настроил мой скрипт для запуска при перезагрузке следующим образом:

sudo systemctl enable monitorConnections

И перезагрузка, я вижу, что он запускает оператор печати «Старт», однако тогда кажется, что ничего не запускается внутри «сниффа» 'команда, однако при запуске

sudo systemctl -l status monitorConnections

я вижу, что сценарий активен - значит, он не ошибся!

Мой вопрос: почему кажется, что нюх Scapy не работает при перезагрузке? Если бы я что-то пропустил

Я честно скажу, что не так - любая помощь по этому поводу будет принята с благодарностью!

...