Question

Ce n’est pas simplement une capture que je cherche à faire ici. Je veux tout d’abord capturer le paquet, puis en temps réel, rechercher dans la charge utile des données spécifiques, les supprimer, injecter une signature et réinjecter le paquet dans la pile pour qu’il soit envoyé comme avant.

J'ai lu les sockets de renvoi ipfw avec IPFW et cela semble très prometteur. Qu'en est-il des exemples de modification de paquets et de réinjection dans la pile à l'aide de sockets de déviation? Aussi, par curiosité, serait-il possible de lire les données du socket en utilisant Java ou est-ce que cela me restreindrait par des compressions et des réinjections, etc.?

Était-ce utile?

La solution

J'allais faire écho aux autres réponses recommandant iptables (en fonction de la complexité des motifs que vous essayez de faire correspondre et des modifications de paquet que vous voulez apporter) - jusqu'à ce que je remarque l'existence de la balise BSD la question.

Comme Stephen Pellicer l'a déjà mentionné, libpcap est une bonne option pour capturer les paquets. Je pense cependant que libpcap peut également être utilisé pour envoyer des paquets. Pour référence, je suis presque sûr que tcpreplay l'utilise pour relire les fichiers au format pcap.

Autres conseils

Voir les sockets de déviation: Détourner des sockets mini HOWTO .

Ils fonctionnent en transmettant le trafic correspondant à une certaine règle ipfw à un socket brut spécial qui peut ensuite réinjecter le trafic modifié dans les couches réseau.

Si vous ne recherchez que la capture de paquets, libpcap est très populaire. Il est utilisé dans des outils de base tels que tcpdump et ethereal. En ce qui concerne la "connexion à la pile", à moins que vous ne envisagiez de modifier fondamentalement la manière dont le réseau est mis en œuvre (c'est-à-dire d'ajouter votre propre couche ou de modifier le comportement de TCP), votre idée d'utiliser un IPF pour la modification ou l'intervention de paquets comme le meilleur pari. Sous Linux, ils ont une cible de redirection spécifique pour les modules d’espace utilisateur. IPF a probablement quelque chose de similaire ou vous pouvez modifier IPF pour faire quelque chose de similaire.

Si vous souhaitez uniquement visualiser les paquets, libpcap est la solution. Vous pouvez le trouver à l'adresse: http://www.tcpdump.org/

Il est possible de le faire dans l’espace utilisateur avec la cible iptables QUEUE ou NFQUEUE, je pense. L’application client se connecte à une file d’attente et reçoit tous les paquets correspondants, qu’elle peut modifier avant leur réinjection (elle peut également les supprimer si elle le souhaite).

Il existe une bibliothèque client libnetfilter_queue avec laquelle elle doit être liée. Malheureusement, la documentation est minime, mais il y a des publications et des exemples de listes de diffusion qui circulent.

Pour des raisons de performances, vous ne voudrez pas utiliser ceci pour chaque paquet, mais seulement pour ceux qui correspondent, que vous devrez faire correspondre à l’aide des règles iptables standard. Si cela ne suffit pas, vous devrez écrire votre propre module de noyau Netfilter.

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