簡體   English   中英

SCAPY HTTP 請求 URL PCAP

[英]SCAPY HTTP Request URL PCAP

我正在嘗試使用帶有 HTTP 層請求的 SCAPY 讀取 PCAP 文件,但沒有輸出。 預期的輸出應該是:

“192.168.1.70 剛剛請求了一個 GET 192.168.1.68:8060/dial/dd.xml”

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

try:
    from scapy.all import * 
except ImportError:
    import scapy

try:
    import scapy_http.http
except ImportError:
    from scapy.layers import http



packet = rdpcap('lo.pcap')

for p in packet:
    if not packet.haslayer('HTTPRequest'):
        return
    http_layer= packet.getlayer('HTTPRequest').fields
    ip_layer = packet.getlayer('IP').fields
    print('\n{0[src]} just  requested a {1[Method]} {1[Host]}{1[Path}]}'.format(ip_layer,http_layer))

你大多了吧,但有一個與你的變量名的混合,所以我改名為第一packetpacketsppacketfor語句,也是return說法是不正確的-你需要一個continue 知道可以在get/haslayer()調用scapy_http.http.HTTPRequest 'HTTPRequest' 與scapy_http.http.HTTPRequest互換使用是scapy_http.http.HTTPRequest用的。 這是一個固定版本:

packets = rdpcap('lo.pcap')

for packet in packets:
    if not packet.haslayer('HTTPRequest'):
        continue
    http_layer= packet.getlayer('HTTPRequest').fields
    ip_layer = packet.getlayer('IP').fields
    print('\n{0[src]} just requested a {1[Method]} {1[Host]}{1[Path]}'.format(ip_layer,http_layer))

更新:Scapy 現在內置支持處理 HTTP 會話(現在不推薦使用 scapy_http 包)。 雖然它們實際上不需要用於為此應用程序提取 HTTP 請求(因此您可以省略session=TCPSession ),但對於提取多包響應很有用。 所以這可以更簡單(盡管現在需要將字節解碼/轉換為字符串):

from scapy.layers.http import HTTPRequest
from scapy.all import *    
sniff(offline='lo.pcap', session=TCPSession, prn=lambda x: f'{x[IP].src} just requested a {x[HTTPRequest].Method.decode("utf-8")} {x[HTTPRequest].Host.decode("utf-8")}{x[HTTPRequest].Path.decode("utf-8")}' if x.haslayer(HTTPRequest) else None)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM