Проблемы с импортом Python: AttributeError: объект «NoneType» не имеет атрибутов «поля»

Я пытаюсь написать небольшой скрипт на Python для Linux Embedded с помощью scapy lib. На моем компьютере с OSX или Linux у меня нет проблем сделать что-то вроде этого:

from scapy.all import IP, sniff
from scapy.layers import http
import urllib, re

def process_tcp_packet(packet):

    http_layer = packet.getlayer(http.HTTPRequest)
    ip_layer = packet.getlayer(IP)
    url = str('{1[Path]}'.format(ip_layer.fields, http_layer.fields))
    if url:
        url = urllib.unquote(url).decode('utf8')
        print re.findall(r'(https?://\S+lh1)', url)


sniff(filter="tcp and host hostexample.com", prn=process_tcp_packet)

Папка Scapy выглядит так:

enter code here
/scapy
  __init__.py
  all.py
  ...
  /layers
   __init__.py
   http.py
   dhcp.py
   ...

Когда я запускаю скрипт, кажется, что все модули импортированы, кроме строки:

url = str('{1[Path]}'.format(ip_layer.fields, http_layer.fields))

Вернуть ошибку:

AttributeError: 'NoneType' object has no attribute 'fields'
-->End of Python script error report<--

Любая помощь будет оценена! Спасибо!


person Reat0ide    schedule 25.04.2015    source источник
comment
Вы напечатали http_layer, чтобы увидеть, что он на самом деле возвращает?   -  person Padraic Cunningham    schedule 25.04.2015
comment
Может быть полезнее напечатать packet и посмотреть, что передается. getlayer, кажется, возвращает None.   -  person Holloway    schedule 25.04.2015
comment
Когда я смотрю на различные примеры scappy, кажется, что они всегда включают идентификатор в getlayer. Посмотрите на ответ в конце этого вопроса stackoverflow.com/questions/13549294/   -  person Joe    schedule 25.04.2015
comment
Чтобы отладить приложение, начните с вывода всех слоев на консоль; вы можете понять, что слоев нет, и поэтому getlayer() возвращает None. Если есть слои, это потому, что вы должны указать, какой из них вы хотите (или найти способ перебирать их)   -  person Joe    schedule 25.04.2015


Ответы (1)


«распечатать http_layer» в OsX-Box:

GET
PATH: someurl....
Http-Version: HTTP/1.1
Host: hostexample.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:37.0)    Gecko/20100101 Firefox/37.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: de,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://hostexample/someurl
Connection: keep-alive

на встроенном: "Нет"

person Reat0ide    schedule 25.04.2015
comment
Я считаю, что Embedded System не начинает обнюхивать .. поэтому пакет пустой, а также http_layer. - person Reat0ide; 25.04.2015