2010-02-06 5 views
5

Y at-il un moyen en C++ sur Windows de surveiller un programme et de rediriger toutes les demandes sortantes qu'il effectue sur un port spécifique? J'ai un simple proxy HTTP C++ et je veux qu'il soit capable de rediriger automatiquement toutes les demandes de navigateur sur le port 80 par lui-même.Connexions sortantes de redirection C++

+0

vous n'avez pas spécifié l'OS - c'est plus facile sur les variantes unix. –

+0

Oh désolé windows. sur linux c'est un iptables oneliner lol. –

+1

Normalement, les programmes ne peuvent pas interférer avec d'autres programmes. Ce serait une violation de la sécurité. Vous devez configurer votre navigateur (ou autre application) pour utiliser explicitement le proxy. –

Répondre

5

La manière simple de le faire est de créer un hook noyau Windows pour intercepter les demandes de socket et les rediriger vers votre proxy.

Certains documents utiles à ce sujet est:

http://www.internals.com/articles/apispy/apispy.htm

Si vous utilisez Windows Vista ou mieux, pensez à plateforme de filtrage Windows (PAM):

http://www.microsoft.com/whdc/device/network/wfp.mspx

Voir également la recherche au Detours (commercial) et EasyHook (gratuit). Ils simplifient considérablement le processus d'écriture des hooks et redirigent les appels d'API (Win32 et Application).

0

Le programme devrait être exécuté avec des privilèges d'administrateur en mode noyau du système d'exploitation hôte. Bien que je n'ai pas une grande expérience avec les hooks du noyau Windows, en BSD et linux son trivial pour installer un module noyau qui écrase les appels système pour créer des sockets et pourrait facilement rediriger toutes les sockets vers un socket proxy de choix .

+1

Si tout le monde utilisait Linux, nos tâches seraient beaucoup plus faciles en général. –

1

Si vous voulez dire [n'importe quel port de destination] vers [un port], vous devrez utiliser des pilotes spéciaux. Le problème avec windows est l'incapacité de bloquer nativement les paquets [drop]. Par exemple, une solution commune est winpcap. Cependant, bien que vous puissiez surveiller le trafic, vous ne pouvez pas arrêter le trafic ou le modifier de manière utile.

Sur Windows, la seule solution que j'ai vu serait d'utiliser open TUN/TAP adapter. Avec cela, vous seriez en mesure de modifier chaque paquet qui quitte votre système.

Si vous connaissez à l'avance le port de destination que vous utiliserez, il deviendra plutôt simple. Il suffit d'écrire un programme socket passthrough C++ qui ne changera que le port de destination.

Si vous souhaitez rediriger les demandes de navigateur, vous pouvez simplement modifier les paramètres dans votre navigateur.

Questions connexes