Je dois faire un certain nombre de choses liées au réseau en C++ que je ferais normalement avec ifconfig
sous Linux, mais je voudrais le faire sans analyser la sortie d'un groupe d'appels système. Quelles bibliothèques C ou C++ puis-je utiliser pour indiquer si une carte réseau est en haut ou en bas, lire ou modifier l'adresse IP et le masque de réseau d'une carte, et modifier la passerelle DNS par défaut?Comment changer une adresse IP en C++?
Répondre
Fondamentalement, vous devez faire un tas d'appels ioctl en utilisant une poignée de socket (SIOCGIFADDR, SIOCADDRT). Vous pouvez trouver des exemples de programmes qui l'utilisent dans la source du noyau Linux sous Documentation/networking. D'autres liens qui pourraient être utiles:
- Network Interface operations on AIX
- XBMC's implementation (consultez CNetworkInterfaceLinux)
EDIT: Permettez-moi d'ajouter que si votre cible est linux de bureau, vous pouvez envisager d'utiliser la API DBUS pour interroger les paramètres réseau à l'aide de NetworkManager.
- http://people.redhat.com/dcbw/NetworkManager/NetworkManager DBUS API.txt (désolé il y a une question d'insérer des liens dans les modifications)
Vous pouvez toujours regarder le code source de ifconfig pour voir comment ils l'ont fait en premier lieu: http://archive.ubuntu.com/ubuntu/pool/main/n/net-tools/net-tools_1.60.orig.tar.gz
Merci. Je garderai cela à l'esprit la prochaine fois que j'essayerai de réinventer la roue. :) –
+ parce que j'aime les gens qui creusent à l'intérieur des sources! – morandg
Le service NetworkManager expose une API sur dbus pour interroger/manipuler le réseau sur de nombreuses distributions de nos jours. Cela peut être trop élevé pour vos besoins (par exemple, vous avez besoin d'un contrôle plus fin du réseau, ou dbus/NetworkManager ne sont pas disponibles sur le système ...), mais cela peut vous fournir ce dont vous avez besoin.
Découvrez le dbus C++ bindings et le NetworkManager API (désolé, je ne trouve pas de meilleure version formatée pour l'instant, mais l'information est là).
- 1. Attraper adresse IP change
- 2. serveur RMI ramassant une ancienne adresse ip
- 3. Adresse IP Navigateur
- 4. Validation de champ pour une adresse IP
- 5. Adresse IP? - Cocoa
- 6. trim ip adresse octet
- 7. adresse IP dans Silverlight
- 8. Obtenir une adresse IP "réelle" avec VB.NET?
- 9. Comment obtenir une adresse en C?
- 10. Comment déterminer si une adresse IP appartient à un pays
- 11. GetExtendedUdpTable et adresse IP distante
- 12. Partage d'une adresse IP dédiée
- 13. Comment obtenir une adresse IP dans un PageMethod?
- 14. Comment convertir la représentation décimale d'une adresse IP en binaire?
- 15. Comment allez-vous configurer une adresse IP virtuelle?
- 16. Comment puis-je faire Compojure écouter une seule adresse IP
- 17. Comment lier à une seule adresse IP avec VisualSVN Server?
- 18. TcpListener: écouter sur chaque adresse, y compris GPRS adresse IP
- 19. Comment déterminer si une adresse IP provient du même réseau local .NET C#
- 20. Comment obtenir l'adresse physique (MAC) d'une adresse IP en utilisant C#?
- 21. Comment résoudre un nom de domaine à une adresse IP avec .NET/C#?
- 22. Notre serveur subversion a une nouvelle adresse IP - maintenant quoi?
- 23. Pourquoi avoir DHCP et adresse IP statique en même temps?
- 24. Autoriser une requête provenant d'une adresse IP spécifique uniquement
- 25. 234.xxx adresse IP - quel est-il
- 26. Comment puis-je trouver tous les noms de domaine qui se résolvent en une adresse IP?
- 27. comment bloquer mon site d'une adresse IP connue?
- 28. Déterminer l'adresse IP d'une imprimante en C#
- 29. IIS7 ou ASP.NET est de retour une adresse IP client étrange Adresse
- 30. Comment pouvez-vous modifier les paramètres réseau (adresse IP, DNS, WINS, nom d'hôte) avec le code en C#
Merci. J'ai fini par utiliser ioctl, que j'ai trouvé à travers le premier lien que vous avez fourni. –
que lire exactement sous Documentation/réseau? –