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.

È stato utile?

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.

Riferimento

  

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top