Python Scapy не нюхает

Когда я запускаю скрипт, scapy не слушает интерфейс, он просто выводит эту ошибку:

Трассировка (последний последний вызов): Файл «keylogger.py», строка 91, в sniff_packets(scapy_expression, target_site) Файл «keylogger.py», строка 15, в sniff_packets sniff(filter=scapy_expression, prn=sniffer_callback(target_site), store=0, iface="eth0") TypeError: sniffer_callback() принимает ровно 2 аргумента (дан 1)

Код, в котором возникает ошибка, следующий (выражение, которое нюхает)

def sniff_packets(scapy_expression, target_site):
    sniff(filter=scapy_expression, prn=sniffer_callback(target_site), store=0, iface="eth0")

Это функция обратного вызова:

    def sniffer_callback(packet, target_site):

            print "[*] Got a packet"

Я не знаю, почему scapy не слушает провод. Любая помощь приветствуется.


person CBaker    schedule 12.03.2013    source источник
comment
Действительно ли это сложнее, чем передать второй аргумент sniffer_callback(target_site)? Я устал от любого ответа, который кажется таким простым, но похоже, что изменение prn=sniffer_callback(target_site) на prn=sniffer_callback действительно сработает.   -  person Jason Sperske    schedule 13.03.2013
comment
Позвольте мне попробовать это по-другому, похоже, вы передаете результат функции sniffer_callback(target_site) (которая не работает, потому что вы определили sniffer_callback() для приема 2 аргументов вместо одного), но правильный способ использовать это - передать функция   -  person Jason Sperske    schedule 13.03.2013
comment
да, но sniffer_callback автоматически передается пакету в качестве аргумента, поэтому при его использовании prn=sniffer_callback(target_site) передается целевой сайт, а затем пакет   -  person CBaker    schedule 13.03.2013
comment
плюс функция сниффера будет работать до того, как она вызовет функцию сниффера. Это приведет к ошибке, как только пакет будет получен   -  person CBaker    schedule 13.03.2013
comment
если бы sniffer_callback(target_site) вернул функцию, я бы посмотрел, как это может работать, но поскольку sniffer_callback() определено, оно вернет None (по умолчанию для любого определения, где возврата нет)   -  person Jason Sperske    schedule 13.03.2013
comment
Вы можете проверить это в REPL. Сначала определите функцию с двумя аргументами: def sniffer_callback(a, b): print a+":"+b, затем попробуйте связать ее, передав только один: prn = sniffer_callback('prn'), вы увидите ту же ошибку.   -  person Jason Sperske    schedule 13.03.2013


Ответы (1)


Проблема в следующем: prn=sniffer_callback(target_site). Вы вызываете sniffer_callback с одним аргументом, что неверно.

Вероятно, это должно быть: prn=sniffer_callback. Поскольку это функция обратного вызова, sniffer_callback следует вызывать откуда-то внутри функции sniff. Поэтому вы даете саму функцию в качестве аргумента, а не значение, которое она вычислила.

person Eike    schedule 12.03.2013
comment
@ Джейсон Сперске Да, мы ответили параллельно. - person Eike; 13.03.2013