Aujourd'hui, je suis tombé sur WireShark qui est capable d'intercepter tout le trafic réseau sur votre PC. Je me demandais s'il est possible de modifier des données après une demande (donc les données renvoyées sur le PC) et de la modifier à l'aide de RegEx? Comme remplacer des mots et des motifs dans les données avant em> il est rendu dans le navigateur? (Exemple: remplacez le mot en colère avec Happy ou remplacer un site Web entier par «Arrêtez la terniisation») p>
Si cela est possible: p>
Notez que la plate-forme pour cela sera Windows et je vais essayer de le faire en C ++ p>
3 Réponses :
Qu'est-ce que vous décrivez s'appelle un "proxy transparent". (En supposant que vous ne modifiez pas le navigateur). Vous aurez généralement besoin d'aide du système d'exploitation pour entrer entre le navigateur et le réseau, ou vous devez mettre en œuvre le proxy dans un routeur séparé. Sous Linux, cela peut être accompli avec des iptables. J'imagine que Windows a une caractéristique similaire. P>
Pour Windows 7 / Vista, vous pouvez utiliser la plate-forme de filtrage Windows (WFP), ce qui vous permet d'insérer des crochets à différentes couches, d'accéder à ces paquets, de les modifier et de les réinjecter dans la pile TCP / IP. Pour Mac OS, vous pouvez utiliser le socket Divert avec IPFW. Donc, vous configurez une règle sur IPFW, détournez certains paquets sur "Divist Socket", faire la modification, puis réinjecter. P>
BTW, WireShark n'intercepte pas vraiment le trafic, il ne dépasse que le trafic ~ p>
Vous pouvez utiliser Windivert (LGPL) à cet effet (Disclaimer: Windivert est mon projet). Windivert est une API de mode utilisateur qui soulève une fonctionnalité de pilote d'appel de l'appel de l'appel de noyau vers l'espace utilisateur.
Le pseudo-code ressemblerait à ceci: P>
HANDLE handle = DivertOpen( "inbound && " // Inbound packets "tcp.SrcPort == 80 && " // HTTP "tcp.PayloadLength > 0", // Data 0, 0, 0); while (TRUE) { // Capture a packet. DivertRecv(handle, buf, size, &addr, &len); // Modify the packet. ... // Re-inject modified packet. DivertSend(handle, buf, len, &addr, NULL); }
Tout ce que je peux vous dire, c'est que c'est possible. Un concept qui fait quelque chose de similaire est l'attaque de la MITM. Je suppose qu'une solution proxy serait le moyen le plus simple de le faire.
Pour les fenêtres, vous devrez soit aller de l'itinéraire d'un pilote (NDIS / TDI), une extension de niveau utilisateur via un fournisseur de socle en couches ou d'utiliser une extension de navigateur pour connecter n'importe quel canal nécessaire pour capturer et modifier les données.
Cela ressemble également à un adaptateur de tunnel pourrait être modifié pour cela. Si vous allez sur cette route, lisez sur L2TP, PPTP, IP sur IP.
Le proxy HTTP peut faire cela, comme Nginx ( nginx.org ).
Privoxy (proxy Web de la non-cache) peut filtrer (modifier) le contenu - code source