Je dois contrôler le trafic entrant et sortant vers / depuis une boîte Linux à partir d'un programme C ++. Je pourrais appeler Je crois que je dois utiliser libnfnetlink , cependant, je n'ai pas été capable de trouver n'importe quelle documentation ou exemple de l'API. p>
Les règles que j'ai besoin pour construire sont assez simples - des choses comme abandonnant des paquets avec un port de destination égal à x etc. Je n'ai pas l'intention d'écrire une application de pare-feu complète. P>
Quelqu'un peut-il suggérer une meilleure approche ou fournir un lien vers une documentation ou des exemples d'applications? Je préfère éviter de lire le code IPTABLES, mais je suppose que je devrais avoir à devoir, si je ne trouve aucune meilleure ressource. P> iptables code> dans mon programme, mais je préférerais beaucoup couper l'homme du milieu et accéder aux fonctions de l'API du noyau moi-même. P>
3 Réponses :
Pourquoi ne pas simplement obtenir la source d'iptables et le faire comme ils le font? Puisqu'il est open source .... p>
Parce que j'ai besoin d'une interface stable - pas une qui peut changer à tout moment.
Une année de retour, j'avais la même exigence et je sondé. Mais après avoir contacté des gars de noyau open source, c'est ce que je suis venu savoir - p>
Les API de noyau d'IPTABLES ne sont pas externalisées, signifie dire, ce ne sont pas des API documentées. En ce sens, les API peuvent changer tout moment. Ils ne doivent être utilisés que par l'outil IPTABLES. Ils ne doivent pas être utilisés par les développeurs d'applications. P>
-Satish p>
Comme Mark dit, personne ne peut vous empêcher de l'utiliser, car il s'agit de la source ouverte. Mais doit faire attention car les API peuvent changer lorsqu'un besoin se pose. Ensuite, votre application doit s'occuper des changements dans le comportement des API.
+1 Informations intéressantes. Je suppose que Thomi fera beaucoup de popen ("iptables ...")
Vous ne devez normalement pas modifier régulièrement les règles de tables IP (c'est-à-dire fréquemment au moment de l'exécution). Par conséquent, appeler / sbin / iptables devrait être bien. P>
Si vous essayez de le faire, vous devez probablement regarder une autre correspondance ou un module cible qui contient sa propre intelligence, ou utilisez Nfqueue pour faire la queue des paquets dans un programme d'utilisateurs qui peut prendre sa propre décision en fonction de sa propre décision. Critères qui peuvent changer aussi souvent que cela aime (méfiez-vous d'envoyer trop de paquets dans les utilisateursPace, c'est un problème de performance potentiel) p>
Ceci est une dup de Stackoverflow.com/Questtions/109553/...
Si vous vous inquiétez de la surcharge populaire / VFORK, vous pouvez utiliser un autre processus pour empiler tous les changements d'IPTABLES et les engager de temps en temps avec Iptables-Restore.