Je suis en train de concevoir un code c simple pour appeler la commande iptables en fonction du besoin. Je veux juste laisser tomber les paquets d'une adresse ip particulière en utilisant mon code c. C'est pourquoi je dois utiliser la commande iptables en fonction de l'entrée donnée. est-il possible d'appeler la commande en utilisant le code c? si c'est alors comment ??? merci d'avance ..Je veux juste utiliser la commande iptables dans mon programme c
Répondre
En supposant que votre programme s'exécute en tant que root, utilisez simplement fork() et exec(), et passez la commande iptables à exec(). Quelque chose comme
if (0 == fork()) {
execl("/sbin/iptables", ...); // supply the proper arguments to iptables.
}
Edit: Je vois d'autres personnes que le système() est une meilleure façon que la fourche/exec.
Il semble que Neha ne sache pas comment utiliser sprintf pour formater la commande afin qu'elle contienne une adresse IP stockée dans une autre variable. Je pense qu'il devrait ressembler à ceci:
char *host_to_block = ....
char comm[1000];
snprintf(comm, sizeof(comm), "iptables -A INPUT -s %s -j DROP", host_to_block);
system(comm);
Notez que ce sera une vulnérabilité de sécurité sauf si vous avez le code pour vérifier que host_to_block contient une adresse IP et non une autre commande shell. Vous pouvez utiliser la question suivante pour référence si la source de la chaîne n'est pas déjà connue pour être valide:
Il est possible de le faire sans utiliser le système() ou exec *() Cependant, je suis sûr que vous êtes également intéressé par la réalisation de votre projet :)
Si, toutefois, vous n'avez besoin que d'une fonctionnalité très rudimentaire d'iptables dans votre programme, ou si vous avez besoin d'une gestion précise des erreurs, vous pouvez obtenir le source au paquet iptables
. Avancé: l'étude des crochets iptables ioctl et des modules de netfiltres correspondants est connue pour être une tâche de liquéfaction de l'esprit.
+1 pour mentionner l'interface sous-jacente de l'OS, c'est-à-dire la manière correcte de le faire. –
L'appel de/sbin/iptables est la bonne façon de le faire, selon le site Web de Netfilter. Les interfaces du noyau (ou en fait la bibliothèque C) ne sont pas destinées à être une API stable. – MarkR
Linux a un ABI stable, indépendamment de ce que ce site peut dire. Linux dit "nous ne cassons jamais l'espace utilisateur". Donc, c'est bien d'utiliser cette API. –
- 1. Je veux créer mon propre débogueur C# - comment on ferait ça? Quels outils devrais-je utiliser?
- 2. Comment utiliser dll COM dans mon programme C++
- 3. Je veux des couleurs différentes dans mon textbox C# webform!
- 4. Je veux définir mon paramètre régional en anglais (UK) sur la charge de mon programme comment puis-je le faire?
- 5. C#/Silverlight: Je veux passer une variable que je veux utiliser dans la fonction de rappel asynchrone
- 6. Comment puis-je chronométrer mon programme C?
- 7. Print_r équivalent pour XCode? Je veux juste voir le contenu de mon tableau
- 8. je veux programme C# pour faire cette opération
- 9. je veux pour désactiver la dans mon linkbutton doubleclick
- 10. Vous voulez améliorer mon code jQuery, fait ce que je veux, juste trop moche, IMO
- 11. Je veux utiliser certaines fonctions Matlab via .DLLs dans un programme .NET
- 12. Quelle application Django/Pinax devrais-je utiliser? Il y a tellement, et je veux juste la plus simple
- 13. Dois-je utiliser XML dans mon jeu C++
- 14. C++ iptables redirection former des paquets séparés
- 15. Je veux utiliser une DLL VB.NET dans un programme VB6. C'est possible?
- 16. Je n'ai pas besoin d'une application Facebook, je veux juste leur API (en Ruby)
- 17. Je veux utiliser Subview comme un alertview
- 18. je veux montrer la sortie de mon programe écrit en C++ dans un fichier xml
- 19. Délai d'exécution de la commande ssh depuis mon programme Java
- 20. Je veux éditer mon fichier xml
- 21. pcap et iptables tussle
- 22. Comment profiler juste une gamme de programme
- 23. Je veux ajouter la date à mon fichier journal
- 24. Appelez la commande mysql SOURCE à partir d'un programme C
- 25. comment utiliser Exceptions dans le programme C++?
- 26. iptables: quel est le problème avec cette règle iptables?
- 27. dois-je utiliser la commande php configure?
- 28. Je veux améliorer mon service de recherche dans http://www.go4film.com
- 29. Je veux caractères unescaped dans mon cookie (jquery)
- 30. Je veux mon InfoWindow sur mesure dans google map
Plutôt que d'utiliser system(), alors utilisez fork suivi d'un execl de/sbin/iptables et placez l'adresse IP dans son propre élément dans le tableau args. De cette façon, vous n'exécutez pas de processus shell, et il n'y a aucun moyen d'injection de shell (accessoirement, c'est légèrement plus efficace, mais pas pertinent) – MarkR
J'ai eu des problèmes avec system() call avec suid exec et j'ai dû revenir à execl(). Même avec execl je devais ajouter usleep (5000) après chaque appel d'iptables pour contourner l'erreur "ressource temporairement indisponible". – anttir