Dans mon système, jai eth0 (qui peut ou non être connecté) et un modem sur ppp0 (qui peut toujours être en haut ou en bas). Dans le cas où les deux interfaces sont actives et ppp0 est la route par défaut, jaimerais trouver un moyen de déterminer ladresse IP réelle de la passerelle de eth0. Jai essayé « netstat -rn » mais dans cette configuration, la sortie est:

 Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0 

Alors, comment puis-je déterminer ladresse de la passerelle de eth0? Dans le cas ci-dessus, ladresse réelle de la passerelle est 192.168.98.1.

Commentaires

  • Quest-ce que " Adresse de passerelle de eth0 ' " censée être?
  • Interfaces don ' t ont des adresses de passerelle, les netblocks en ont. Une adresse de passerelle indique au noyau où transférer les paquets destinés à un hôte sur un réseau. Si ladresse est associée à une interface donnée, cette interface sera utilisée, mais ladresse est indépendante de linterface.
  • Donc, dans mon application, je suis censé faire de eth0 la passerelle par défaut si elle a une connectivité. Mais pour vérifier la connectivité, je fais une route temporaire vers mon bon serveur connu. Mais pour ce faire, jai besoin de connaître ladresse de la passerelle de eth0 '. Alors, comment puis-je déterminer cela?
  • Vérifiez ceci: stackoverflow.com/a/15973156/1422630

Réponse

Supposons que eth0 est linterface client DHCP.
Une option consiste à vérifier Fichiers de location du client DHCP dhcpd.leases
Le lieu et le nom dépendent du système; sur certains systèmes Fedora, les fichiers sous /var/lib/dhclient/ sont des fichiers de bail, où la chaîne intéressante est comme ça:

 option routers 192.168.1.1; 

Une autre option, qui a fonctionné pour moi sur une funtoo box: dhcpcd -U eth0
imprime un joli tableau, prêt à être source dans des scripts

broadcast_address=192.168.1.255 dhcp_lease_time=86400 dhcp_message_type=5 dhcp_server_identifier=192.168.1.1 domain_name_servers="192.168.1.1 192.168.1.101" ip_address=192.168.1.101 network_number=192.168.1.0 routers=192.168.1.1 subnet_cidr=24 subnet_mask=255.255.255.0 

Il existe dautres options comme dhcping, dhclient -n, selon google et pages de manuel, mais elles échouent sur mes boîtes, mais peut fonctionner pour vous.

Réponse

Votre erreur est que vous « associez les informations sur la sortie netstat à linterface plutôt que la destination. Les adresses de destination peuvent être associées à des passerelles. Lorsque vous configurez votre réseau, vous associez des interfaces et des passerelles à des ensembles d’adresses de destination. La question que vous devez donc vous poser est «quelle est la passerelle pour les destinations dans 192.168.98 / 24? « Je » parie quil ny en a pas un, que les appareils à distance sont pontés ou directement connectés à cet Ethernet.

Notez que votre route par défaut est via ppp0 (la dernière ligne est une route générique, le masque est tous à zéro donc aucun bit nest réellement comparé, donc les paquets pour ces adresses sont envoyés via ppp0). Ainsi, les paquets pour toute destination ne figurant pas dans 127.xx.xx.xx ou 192.168.98.xx finiront par correspondre au masque générique et seront envoyés via ppp0. Maintenant, parce que cest un protocole point à point, chaque paquet envoyé sur cette interface va au seul appareil directement adressable sur ce lien, celui à lautre bout de celui-ci. Il nest pas nécessaire de spécifier une passerelle pour cela car chaque paquet est envoyé sur cette interface est envoyé via cet appareil, que sa destination Internet soit cet appareil ou non.

Maintenant: si vous avez un routeur accessible via eth0 que vous utilisez lorsque vous le pouvez, ce routeur a presque certainement une adresse IP dans la plage 192.168.98.xx, au moins aussi probable que non 192.168.98.1, et quand ce routeur est alimenté et effectivement connecté à Internet vous voulez que votre itinéraire par défaut, celui pour tout ce qui nest pas directement connecté à un réseau local, soit default via 192.168.98.1

Vous pourriez avoir le plus récent (cest « un terme relatif, il » existe depuis très longtemps) ip commande en cours dutilisation, essayez ip route et si cela vous donne une sortie, essayez . Sinon, essayez route help.


Ainsi, votre interface eth0 na tout simplement pas une adresse de passerelle. Il se peut quun autre appareil ou plusieurs appareils connectés à cet Ethernet soient prêts à servir de passerelle. Vous dites que votre réseau en a un qui répond sur le (purement conventionnel) .1. Aucune loi ne dit quil doit avoir cette adresse, et aucune loi ne dit quil doit annoncer sa présence. Il existe des moyens courants, le plus courant dentre eux étant que les boîtiers exécutant un logiciel de routage exécutent également des serveurs dhcp et disent à quiconque parle dhcp de cette manière. La réponse de MolbOrg donne un aperçu assez typique de la configuration, mais tout ce que quelquun peut suggérer à ce stade sera plus ou moins susceptible de correspondre à votre réseau.

Commentaires

  • dans mon cas, la passerelle se termine par .129, ce qui est assez déroutant .. il est déterminé lorsque le partage de connexion USB est activé mais après cela, je ne vois aucun moyen de déterminer cela (pour les autres interfaces) après un route -n (où les passerelles ne sont pas configurées (0.0.0.0). EDIT: trouvé! stackoverflow.com/a/15973156/1422630

Réponse

Linux:

Vous devrez ouvrir un terminal. En fonction de votre distribution Linux, il peut être situé dans les éléments de menu en haut ou en bas de votre écran. Dans cet exemple , nous utiliserons Fedora. Cliquez sur Applications > Outils système > Terminal.

Lorsque le terminal est ouvrez, tapez la commande suivante: ip route | grep default

La sortie de ceci devrait ressembler à ceci:

joe$ ip route | grep default default via 192.168.1.1 dev eth0 proto static 

Dans cet exemple, encore une fois, 192.168.1.1 est ladresse IP de votre passerelle (routeur) par défaut.

entrez la description de limage ici

Pour plus dinformations sur ce sujet comment trouver votre adresse IP de passerelle (linux / win / osx) .

Commentaires

  • Bien que je ne parle pas au " quand il le fait pas la passerelle par défaut " partie de la question, cette réponse contient lindication dont javais besoin (route -n) pour obtenir ladresse IP de la passerelle pour eth0 dans un script bash: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Answer

Pour obtenir le nom de la carte réseau qui est la passerelle par défaut, utilisez cette commande:

netstat -rn | grep -m 1 UG | awk "{print $8}" 

Si vous avez plusieurs cartes réseau actives sur votre machine, cette commande vous aide à trouver la carte réseau principale qui possède la passerelle principale par défaut.

Commentaires

  • grep XX | awk '{ action }' peut généralement être fusionné en awk '/XX/ { action }'
  • Pensez à expliquer ce et comment votre commande fonctionne
  • @ mattia.b89 Jai mis à jour ma réponse.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *