Я пытаюсь написать небольшой скрипт на 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<--
Любая помощь будет оценена! Спасибо!
http_layer
, чтобы увидеть, что он на самом деле возвращает? - person Padraic Cunningham   schedule 25.04.2015packet
и посмотреть, что передается.getlayer
, кажется, возвращает None. - person Holloway   schedule 25.04.2015