Domanda

In primo luogo, sono relativamente nuovo alla programmazione di rete. Voglio intercettare e ritardare il traffico HTTP prima che arrivi all'applicazione server. Ho approfondito libnetfilter_queue che mi fornisce tutte le informazioni di cui ho bisogno per ritardare adeguatamente, ma a un livello troppo basso. Posso ritardare il traffico lì, ma a meno che non accetti quasi immediatamente i datagrammi IP (quindi inviandoli nello stack quando voglio ritardarli), riceveranno il risentimento (quando non arriva alcun ACK), che non è quello che voglio.

Non voglio né devo avere a che fare con TCP, ma solo i payload che offre. Quindi la mia domanda è: come intercettare il traffico su una determinata porta prima che raggiunga la sua destinazione, ma dopo che TCP lo ha riconosciuto e verificato?

Grazie

Modifica: si spera sia ovvio dal tag e libnetfilter_queue - questo è per Linux

È stato utile?

Soluzione

Dirotta le connessioni tramite un proxy HTTP. Google è un buon modo per farlo se non puoi semplicemente impostare HTTP_PROXY sul client o impostare il filtro in esecuzione con l'IP e il numero di porta del server corrente, spostando il server reale su un altro IP.

Quindi le connessioni TCP attuali sono tra te e il client, quindi da te al server. Quindi non devi fare i conti con gli ACK, perché TCP vede sempre la missione compiuta.

modifica: vedo che i commenti sull'originale hanno già avuto questa idea usando iptables per reindirizzare il traffico attraverso il processo proxy trasparente sulla stessa macchina.

Altri suggerimenti

Beh, ho fatto ciò che ho suggerito nel mio commento, e funziona, anche se ha sentito un modo prolisso di farlo.

Il (o a) problema è che il web server ora, comprensibilmente, pensa che ogni richiesta provenga da localhost. Vorrei davvero che questo ritardo fosse trasparente sia per il client che per il server (tranne che nel tempo ovviamente!). C'è qualcosa che posso fare al riguardo?

In caso contrario, quali sono le implicazioni? Ogni sessione HTTP avviene attraverso una porta diversa: è sufficiente per separarli completamente come dovrebbero essere? Presumibilmente, considerando che funziona dietro un NAT in cui l'indirizzo per molte sessioni è lo stesso.

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