2008-12-18 13 views
3

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

4

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:

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.

+0

Merci. J'ai fini par utiliser ioctl, que j'ai trouvé à travers le premier lien que vous avez fourni. –

+0

que lire exactement sous Documentation/réseau? –

0

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à).

Questions connexes