2015-04-25 27 views
-1

我想在Linux上用scapy lib編寫一個小python腳本。 在我的OSX或Linux中我沒有任何問題,做這樣的事情:Python導入問題:AttributeError:'NoneType'對象沒有屬性'字段'

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<-- 

任何幫助將不勝感激! 謝謝!

+0

你有沒有印'http_layer',看看它實際上返回? –

+0

打印'packet'並查看傳入的內容會更有用。'getlayer'似乎正在返回None。 – Holloway

+0

當我看着各種scappy示例時,他們似乎總是在getlayer中包含一個標識符。看看這個問題結尾的答案http://stackoverflow.com/questions/13549294/get-all-the-layers-in-a-packet – Joe

回答

0

「打印http_layer」 關於OSX盒:

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 

嵌入式: 「無」

+0

我相信嵌入式系統不會開始嗅探..這個包是空的,也是http_layer。 – Reat0ide

相關問題