Question

Premièrement, je suis relativement nouveau en programmation réseau. Je souhaite intercepter et retarder le trafic HTTP avant qu'il ne parvienne à l'application serveur. Je me suis plongé dans libnetfilter_queue, qui me donne toutes les informations nécessaires pour pouvoir différer, mais à un niveau trop bas. Je peux retarder le trafic là-bas, mais à moins que j'accepte les datagrammes IP presque immédiatement (donc, en les envoyant dans la pile lorsque je veux les retarder), ils seront renvoyés (lorsqu'aucun ACK n'arrive), ce qui n'est pas ce que je veux.

Je ne veux pas ou n'ai pas besoin de faire face à TCP, juste aux charges utiles qu'il fournit. Ma question est donc la suivante: comment puis-je intercepter le trafic sur un port particulier avant qu’il atteigne sa destination, mais après que TCP l’a reconnu et vérifié?

Merci

Edit: J'espère que cela ressort clairement de la balise et de libnetfilter_queue - ceci est pour Linux

Était-ce utile?

La solution

Piratez les connexions via un proxy HTTP. Si vous ne pouvez pas configurer HTTP_PROXY sur le client, ou configurer votre filtre de manière à ce qu'il fonctionne avec l'adresse IP et le numéro de port du serveur actuel, déplacez le serveur réel vers une autre adresse IP.

Ainsi, les connexions TCP réelles sont établies entre le client et vous, puis de vous au serveur. Dans ce cas, vous n’avez pas à traiter avec les ACK, car TCP voit toujours la mission accomplie.

modifier: je vois que les commentaires sur l'original ont déjà eu cette idée en utilisant iptables pour rediriger le trafic via votre processus de proxy transparent sur le même ordinateur.

Autres conseils

Eh bien, j’ai fait ce que j’avais suggéré dans mon commentaire, et ça marche, même si c’est une façon de le faire à long terme.

Le (ou un) problème est que le serveur Web pense maintenant que chaque requête provient de localhost. Vraiment, j'aimerais que ce délai soit transparent à la fois pour le client et le serveur (sauf dans le temps bien sûr!). Y a-t-il quelque chose que je puisse faire à ce sujet?

Si non, quelles sont les implications? Chaque session HTTP passe par un port différent - est-ce suffisant pour qu'elles soient complètement séparées comme il se doit? Envisagez donc que cela fonctionne lorsque vous vous trouvez derrière un NAT où l'adresse de nombreuses sessions est la même.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top