Question

Considérons la configuration suivante:Un PC windows avec une interface LAN et d'une interface wi-fi (le standard pour tout nouvel ordinateur portable).Chacune des interfaces peut être connecté ou déconnecté d'un réseau.J'ai besoin d'un moyen de déterminer qui de l'une des cartes est l'un connecté à internet - en particulier, dans le cas où ils sont tous les deux connectés à des réseaux différents, l'un avec connexion à l'internet et l'autre sans.

Ma solution actuelle consiste à utiliser IPHelper de l' "GetBestInterface"fonction et fournit l'adresse IP "0.0.0.0".

Avez-vous d'autres solutions que vous pourriez suggérer à ce problème?

Suivant les réponses, permettez-moi de préciser:

  • J'ai besoin de cela parce que j'ai un produit qui a de choisir la carte à lier.Je n'ai aucun moyen de contrôle de la configuration du réseau ou l'hôte sur lequel le produit sera exécuté et j'ai donc besoin d'une solution qui est aussi solide que possible, avec le moins d'hypothèses possibles.
  • J'ai besoin de le faire dans le code, car c'est une partie d'un produit.

@Chris Upchurch:Cela me rend dépendant google.com jusqu' (généralement pas un problème) et sur n'importe quel pare-feu personnel qui pourrait être installé pour permettre de ping.

@Till:Comme Steve Moon, a déclaré, en s'appuyant sur l'adresse de la carte est le genre de risque parce que vous faites beaucoup d'hypothèses sur le réseau interne de l'installation.

@Steve Lune:En regardant la table de routage sonne comme une bonne idée, mais au lieu d'appliquer la logique de routage moi-même, j'essaie d'utiliser "GetBestInterface" comme décrit ci-dessus.Je crois que ce qu'il doit faire est exactement ce que vous avez indiqué dans votre réponse, mais je ne suis pas vraiment sûr.La raison pour laquelle je suis réticent à mettre en place mes propres "la logique de routage" c'est qu'il ya une meilleure chance que je vais recevoir mal que si j'utilise une bibliothèque/API écrit et testé par plus de "noyau dur" réseau de personnes.

Était-ce utile?

La solution

Techniquement, il n'est pas "connecté à Internet".La vraie question est l'interface qui est routables à une adresse de votre choix.Maintenant, vous êtes à la requête de la "route par défaut" - celui qui s'applique si aucune route vers la destination existe.Mais, vous êtes ignorant tout des itinéraires spécifiques.

Heureusement, pour 99,9% des utilisateurs à domicile, qui va faire l'affaire.Ils ne sont pas susceptibles d'avoir beaucoup d'une table de routage, et GetBestInterface automatiquement préfèrent filaire sans fil - de sorte que vous devrait être bon.Jeter dans une option de remplacement pour le .1% des cas vous vis, et l'appeler un jour.

Mais, pour une utilisation en entreprise, vous devriez être en utilisant GetBestInterface pour une destination spécifique, sinon, vous aurez des problèmes si quelqu'un est sur le même réseau local que votre destination (ce qui signifie que vous devez prendre le "interne" de l'interface, pas les "externes") ou a un itinéraire jusqu'à votre destination (mon réseau interne par les pairs avec votre réseau de destination, par exemple).

Encore une fois, je ne suis pas sûr de ce que vous comptez faire avec cet adaptateur "connecté à Internet", il pourrait ne pas être une grosse affaire.

Autres conseils

Apparemment, dans Vista, il y a de nouvelles interfaces qui permettent d'interrogation pour la connectivité internet et bien plus.Jetez un oeil à la NLM Interfaces et, plus précisément à INetworkConnection - vous pouvez spécifiquement de la requête si la connexion réseau dispose d'une connexion internet à l'aide de la GetConnectivity méthode.

Voir aussi: Réseau de Sensibilisation sur Windows Vista Malheureusement, ce n'est disponible que sur Vista, donc pour XP, je serais obligé de conserver l'original de mes heuristique.

Je regardais la table de routage.Selon le NIC a une route de 0.0.0.0 ET est activé ET la métrique la plus faible, est la carte réseau qui est actuellement l'envoi de paquets à internet.

Donc dans mon cas, le haut est l '"internet nic'.

IPv4 Route Table
===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0        10.0.0.10        10.0.0.51     20
          0.0.0.0          0.0.0.0        10.0.0.10        10.0.0.50     25
(much other stuff deleted)

Une autre alternative est de ping ou GetBestInterface 4.2.2.2 - c'est un vieux et vénérable serveur DNS, qui sont actuellement détenus par GTEI;anciennement par Sprint si je me souviens bien.

Ping google.com bien que chaque carte réseau.

Démarrer > Exécuter > cmd.exe (cela fonctionne sous XP et Vista): ipconfig /all

Cette affiche toutes les informations sur les interfaces de votre ordinateur.Le "public" face à l'interface doit avoir une adresse IP publique.Pour commencer, il ne devrait pas être 192.168.x.x ou 10.x.x.x :)

l'exécution de la commande traceroute pour certains publics, le site va vous montrer.Bien sûr, il peut y avoir plus d'une interface qui permettrait de vous y rendre.

Regardez la table de routage?En général, sauf si vous êtes de routage entre les réseaux dans windows (ce qui est possible, mais rare pour un ordinateur client de ces jours) l'interface qui tient la route par défaut va avoir la connexion Internet.

Votre question n'est pas de détails sur le pourquoi ou ce que vous faites cela avec donc je ne peux pas donner des précisions.L'outil de ligne de commande "route" peut être d'une certaine aide, mais il y a probablement des bibliothèques pour quel que soit le langage de programmation que vous utilisez pour regarder la table de routage.

Vous ne pouvez pas compter sur l'adresse IP de l'interface (par exemple, en supposant un RFC 1918 adresse [192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8] n'est-ce pas l'internet) car la plupart des sites ont une sorte de Fusée de pare-feu ou un proxy de l'installation et de l'internet "" l'interface est vraiment sur un "privé" lan qui vous sort de l'Internet.

Mise à JOUR:Basé sur la poursuite de votre information, il semble que vous avez une solution décente.Je ne suis pas si sûr au sujet de le choix de 0.0.0.0 puisque c'est un cas limite pour l'adresse IP -- peut-être OK sur votre mélange de plate-forme/langue.Les sons (à partir de la description de l'API) comme vous pouvez simplement spécifier une adresse, alors pourquoi pas une adresse connue pour être sur l'Internet, par exemplel'adresse IP de votre site web, ou quelque chose de plus aléatoire comme 65.66.67.68?Assurez-vous juste de ne pas choisir l'un de la de la rfc 1918 adresses, ou le localhost gamme (127.0.0.0/8), ou multicast, toute autre plage réservée, et toute adresse qui correspond à un .mil ou .gov (bien qu'il ne ressemble pas à getbestinterface envoie tout le trafic, il serait sucer à trouver par avoir le gouvernement fédéral casser votre porte vers le bas...:)

La recherche dans le réseau de point de vue, que ce soit pourrait être de routage de l'internet "" à tout moment.Si des choses comme le protocole spanning tree sont activés sur un interrupteur, vous pouvez trouver que ce qui peut avoir été le routage de la carte pour commencer avec peut-être pas plus.

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