TCP: Come sono i numeri seguenti / ACK generati?
-
22-08-2019 - |
Domanda
Attualmente sto lavorando su un programma che annusa i pacchetti TCP inviati e ricevuti da e verso un particolare indirizzo. Quello che sto cercando di realizzare è rispondere con pacchetti su misura personalizzato a determinati pacchetti ricevuti. Ho già fatto il parsing. Posso già generato Ethernet valide, IP, e - per la maggior parte -. Pacchetti TCP
L'unica cosa che io non riesco a capire è come i numeri seguenti / ACK sono determinati.
Mentre questo può essere irrilevante per il problema, il programma è scritto in C ++ utilizzando WinPCap. Chiedo per eventuali suggerimenti, articoli, o altre risorse che mi può aiutare.
Soluzione
Quando viene stabilita una connessione TCP, ogni lato genera un numero casuale come suo numero di sequenza iniziale. Si tratta di un numero a caso fortemente:. Ci sono problemi di sicurezza se qualcuno su internet può indovinare il numero di sequenza, in quanto possono facilmente falsificare i pacchetti per iniettare nel flusso TCP
Successivamente, per ogni byte trasmesso il numero di sequenza viene incrementato di 1. Il campo ACK è il numero di sequenza dal lato opposto, rimandato a riconoscere la ricezione.
RFC 793 , specifiche del protocollo TCP originale, può essere di grande aiuto.
Altri suggerimenti
Ho lo stesso lavoro da fare.
Innanzitutto la sequenza iniziale verrà generato casualmente (0-4294967297).
Poi il ricevitore conterà la lunghezza dei dati che ha ricevuto e inviare l'ACK del seq# + length = x
al mittente. La sequenza sarà quindi x e il mittente invia i dati. Allo stesso modo il ricevitore conterà il x + length = y
lunghezza e inviare l'ACK come y
e così via ... La sua modalità di generazione della SEQ / ACK ...
Se si desidera mostrare praticamente provare a sniffare un pacchetto di Wireshark e seguire il flusso TCP e vedere lo scenario ...
Se ho capito bene - si sta cercando di montare una TCP SEQ attacco predizione . Se questo è il caso, ti consigliamo di studiare le specifiche della vostra destinazione numero di sequenza iniziale di OS generatore.
Ci sono stati ampiamente pubblicizzati vulnerabilties in praticamente tutti i principali sistemi operativi WRT loro generatori ISN essere prevedibile . Non ho seguito la ricaduta da vicino, ma la mia comprensione è che la maggior parte fornitori rilasciate patch per randomize loro incrementi ISN .
Sembra che il resto delle risposte ha spiegato praticamente tutto su dove trovare informazioni dettagliate e ufficiali circa ACK, vale a dire TCP RFC
Ecco una pagina più pratico e "facile capire" che ho trovato quando stavo facendo implementazioni simili che possono anche aiutare a Analisi TCP - Sezione 2: sequenza e Riconoscimento Numbers
RFC 793 sezione 3.3 copre numeri di sequenza. L'ultima volta che ho scritto il codice a quel livello, penso che abbiamo appena tenuto un contatore one-up per i numeri di sequenza che persistevano.
Questi valori di riferimento previsti gli offset di inizio del carico utile per il pacchetto relativo al numero di sequenza iniziale per la connessione.
numero di sequenza (32 bit) - ha una duplice ruolo Se è impostato il flag SYN, allora questo è il numero di sequenza iniziale. Il Numero di sequenza del primo effettivo byte di dati sarà allora questa sequenza il numero più 1. Se il flag SYN non è set, allora questo è il numero di sequenza del primo byte di dati
Riconoscimento numero (32 bit) - se il flag ACK è impostare il valore di questo campo è il byte successivo prevede che la il ricevitore è in attesa.
I numeri sono generati casualmente da entrambi i lati, poi aumentato numero di ottetti (bytes).
viene stabilito L'incremento numeri di sequenza dopo una connessione. Il numero di sequenza iniziale in una nuova connessione è idealmente scelto a caso, ma un sacco di sistemi operativi hanno qualche algoritmo semi-casuale. Gli RFC sono il posto migliore per saperne di più TCP RFC .