Я пытаюсь использовать функциональность TCPSession (например: sniff(offline="./my_file.pcap", prn=func, store=False, session=TCPSession)
), но без создания файла PCAP.
Я получаю список пакетов RAW, чтобы я мог создать список пакетов Scapy, но мне нужно функциональность TCPSession из-за пакетов HTTP: без TCPSession заголовки и тело находятся в разных пакетах, поэтому класс слоев HTTP не может идентифицировать часть тела.
Итак, у меня есть этот код, который находит HTTP-запросы :
import pickle
from scapy.all import *
from scapy.layers import http
load_layer("http")
def expand(x):
yield x
while x.payload:
x = x.payload
yield x
file_pickle = open('prueba.pkl','rb')
pkt_list = pickle.load(file_pickle)
for pkt_raw in pkt_list:
p = Ether(pkt_raw)
if p.haslayer(IP):
srcIP = p[IP].src
if p.haslayer(HTTP):
if p.haslayer(HTTPRequest):
print(list(expand(p)), end="\n---------------------------------------------------\n")
Выполнение этого кода находит HTTP-запросы, но без части тела POST-запросов:
[...]<HTTPRequest Method='POST' Path='/NP3POCF.jsp' Http_Version='HTTP/1.1' Accept='*/*' Accept_Encoding='gzip, deflate' Connection='keep-alive' Content_Length='56' Content_Type='application/x-www-form-urlencoded' Host='172.16.191.129' User_Agent='python-requests/2.7.0 CPython/3.7.5 Linux/5.3.0-kali2-amd64' |>]
С помощью анализатор с TCPSession (такой как функция Scapy sniff) в пакете есть уровень Raw, который содержит тело запроса.
Любая помощь в применении TCPSession? Спасибо.