2009-06-08 8 views
4

J'utilise une pile TCP d'espace utilisateur basée sur la pile Linux fonctionnant sous Linux. Malheureusement, il faut que les applications appellent spécifiquement leurs propres versions modifiées des fonctions de l'API des sockets normales, puis saisissent simplement les paquets entrants qu'il reçoit en réponse à l'aide de libpcap.Redirection de paquets vers l'espace utilisateur Pile TCP sans modification de l'application

Maintenant, ma question est de savoir s'il existe un moyen de rediriger les paquets d'une application vers cette pile TCP sans avoir à modifier l'application elle-même. En d'autres termes, je cherche un moyen d'intercepter les appels à l'API sockets et de les rediriger vers l'équivalent espace utilisateur.

J'espère que c'est plus ou moins clair ce que je veux dire.

+2

Quelle pile TCP d'espace utilisateur utilisez-vous? – fadedbee

Répondre

1

deux idées (non testé, d'abord les google pour voir si quelqu'un l'a fait avant):

  1. mis un remplacement stdlib qui utilise le protocole TCP lib au lieu de syscalls. puis utilisez ld.so pour le remplacer au moment du chargement.

    • ensemble un dispositif net tun, les applications font parler à ce sujet, et d'écrire une autre tâche qui relie l'autre côté du tun au TCP lib userspace.

Je suppose que le premier fonctionne mieux et pourrait être moins fragile. Il a besoin de connaissances stdlib délicate, pensée. En outre, le périphérique tun semble uniquement vous donner des paquets IP. Votre meilleur pari est de rechercher d'autres utilisateurs de la bibliothèque TCP, il est tout à fait possible qu'il existe déjà une sorte de 'chargeur' qui fait exactement cela.

0

Utilisez tuntap comme un pont est une bonne idée, et tap (pas tun) peut vous donner un paquet Ethernet complet, y compris l'en-tête ehternet (mac). Ici, j'ai une question pour vous, comment votre pile d'espace utilisateur gère les paquets entrants. Dans votre message, vous avez mentionné qu'il utilisait libpcap pour récupérer des paquets, mais comme je le sais, libpcap obtiendra juste une copie du paquet entrant, et ce paquet passera quand même dans le chemin normal de la pile du noyau et ce n'est peut-être pas ce que vous vouloir. Par exemple, si c'est un paquet tcp pour votre application qui fonctionne en fonction de la pile tcp/ip de l'espace utilisateur, et le noyau ne le connait pas et peut-être juste envoyer un premier paquet qui peut casser votre connexion normale. Donc, je pense que votre pile tcp/ip de l'espace utilisateur peut appliquer des méthodes spéciales pour empêcher le paquet entrant d'être passé dans le noyau, n'est-ce pas? Comment cela fait-il cela?

Questions connexes