J'ai besoin d'apporter une petite modification au trafic entrant d'un hôte TCP connu: port avant que le processus gérant la connexion ne reçoive le flux.
Par exemple, laissez 192.168.1.88 être un hôte distant qui exécute un serveur Web.
J'ai besoin de cela, lorsqu'un processus sur mon hôte local reçoit des données de 192.168.1.88:80 (par exemple le navigateur), les données sont d'abord modifiées en remplaçant text-A
par text-B
, comme ceci:
- 127.0.0.1: ... se connecte à 192.168.1.88:80
127.0.0.1: ... envoie à 192.168.1.88:80:
GET /
192.168.1.88:80 envoie à 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
Ces données sont quelque peu interceptées par le système et transmises à un programme dont la sortie est:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
le système donne les données ainsi modifiées au processus gérant 127.0.0.1: ..., comme si elles venaient de 192.168.1.88:80.
En supposant que j'ai une méthode basée sur le flux pour effectuer ces modifications (en utilisant sed
par exemple), quelle est la façon la plus simple de prétraiter le flux TCP entrant?
Je suppose que cela impliquerait iptables
, mais je ne suis pas très bon dans ce domaine.
Notez que l'application doit sembler traiter l'hôte d'origine, donc la configuration d'un proxy n'est probablement pas une solution.
la source
Réponses:
Utilisez un proxy en réseau et iptables.
Exécutez ensuite:
NetSED est un petit utilitaire pratique conçu pour modifier, en temps réel, le contenu des paquets transmis via votre réseau. Il est très utile pour l'altération, la falsification ou la manipulation de paquets réseau. NetSED prend en charge:
audit de protocole de boîte noire - chaque fois que deux ou plusieurs boîtiers propriétaires communiquent à l'aide d'un protocole non documenté. En imposant des changements dans les transmissions en cours, vous pourrez tester si l'application examinée peut être revendiquée comme sécurisée.
expériences de génération de fuzz, tests d'intégrité - chaque fois que vous effectuez des tests de stabilité d'une application pour voir comment elle se soucie de l'intégrité des données;
autres cas d'utilisation courants: transferts trompeurs, filtrage de contenu, conversion de protocole - tout ce qui convient le mieux à votre tâche.
la source
netsed
, cela correspond presque parfaitement à mon objectif. La seule chose que je ne comprends pas, c'est comment configurer le "proxy transparent local" (voir la question). Je devrais peut-être mettre en place une autre interface réseau (virtuelle) pour l'obtenir. Soit dit en passant, pour l'instant, c'est la réponse la plus satisfaisante.OUTPUT
, nonPREROUTING
. aussi, l'-D
option devait être-A
pour moi. aussi, pour l'-j
option, j'ai dû utiliserDNAT --to-destination (ip)
ouREDIRECT --to-port
. Enfin, je n'ai PAS pu corriger l'erreur de segmentation de netsed. voir aussi: ubuntuforums.org/showthread.php?t=2337389Vous pouvez faire exactement cela en utilisant iptables pour proxyer de manière transparente les connexions via un proxy squid , puis en faisant réécrire à Squid le contenu http pour vous.
la source
iptables
+ l'utilisation de libnetfilter_qu est une autre option qui fera ce que vous souhaitez:"... [réinjecter] les paquets modifiés au sous-système du noyau nfnetlink_queue."
Il vous donnera probablement la plus grande extensibilité car c'est à vous de coder le logiciel.
Il y a un wrapper python disponible.
la source