Функция Scapy не возвращает запросы DHCP от кнопки тире Amazon

Я использую функцию scapy sniff, чтобы использовать кнопку Amazon Dash для запуска функции. Код, который я использую, полностью взят из решения для этого на Github с некоторыми очень незначительными изменениями.

Я пошел на проводную акулу и обнаружил запросы DHCP кнопки тире и вытащил MAC-адрес кнопки отсюда, но функция по-прежнему ничего не возвращает.

Вот код:

import logging
logging.getLogger('scapy.runtime').setLevel(logging.ERROR)
from scapy.all import *

def dash_pressed():
  print 'Dash button pressed.'

def udp_filter(pkt):
  options = pkt[DHCP].options
  for option in options:
    if isinstance(option, tuple):
      if 'requested_addr' in option:
        mac_to_action[pkt.src]()
        break

mac_to_action = {'DASH_MAC_ADDRESS_HERE' : dash_pressed}
mac_id_list = list(mac_to_action.keys())

print 'Waiting for a button press...'
sniff(prn=udp_filter, store=0, filter='udp', lfilter=lambda d: d.src in mac_id_list)

(Заменена строка MAC-адреса в словаре mac_to_action)

Я не получаю никаких ошибок, просто ничего не происходит. Когда я печатаю функцию sniff, она показывает 0 пакетов udp. Я дважды и трижды проверил свой MAC-адрес, и это определенно исходный адрес (не то чтобы я все равно мог перепутать его с ff: ff: ff: ff: ff: ff). Почему не срабатывает нажатие кнопки на приборной панели?


person slearner    schedule 27.03.2017    source источник


Ответы (1)


Этот код работает для моих кнопок Amazon

def arp_handler(pkt):
    """ Handles sniffed ARP requests """
    for layer in [ARP]:
        if pkt.haslayer(layer):
            if pkt[layer].op == 1:  #who-has request
                mac = pkt[layer].hwsrc
                # your code to handle


def main():
    sniff(prn=arp_handler, filter="arp", store=0)

Я не уверен, что проблема в разнице ARP/DHCP. Возможно, вы запускаете код без привилегий root или делаете что-то еще, что мешает правильной работе scapy.

person ANDgineer    schedule 23.01.2018