Я бегал по кругу со следующим сценарием:
Клиент отправляет GET-запрос, запрашивая ресурс размером в несколько полных MSS 1460-байтовых TCP-пакетов, скажем, 6. Как заставитьscapy для отправки сегмента TCP с флагом FIN ДО того, как все пакеты будут доставлены сервером, т.е.после пакета 1,2,3,4,5
пробовал комбинацию простых запросов / цикла curl и скрипта python / scapy:
from scapy.all import * from time import sleep
os.system("iptables -I OUTPUT -p tcp --tcp-flags ALL RST,ACK -j DROP")
os.system("iptables -I OUTPUT -p tcp --tcp-flags ALL RST -j DROP")
def packet(pkt):
if pkt[TCP].flags == 16:
print('ACK packet detected port : ' + str(pkt[TCP].sport) + ' from IP Src : ' + pkt[IP].src)
send(IP(dst=pkt[IP].src, src=pkt[IP].dst)/TCP(dport=pkt[TCP].sport, sport=pkt[TCP].dport,ack=pkt[TCP].seq + 1, flags='F')) sniff(iface="ens160", prn=packet, filter="host 1.1.1.1",count=10)
Но сегмент, содержащий флаг FIN, прибывает всегдапоздно и из-за TCP seq / ack синхронизация.