În sistemul meu am eth0 (care poate sau nu poate fi conectat) și un modem pe ppp0 (care poate fi întotdeauna sus sau jos). În cazul în care ambele interfețe sunt sus și ppp0 este ruta implicită, aș dori să găsesc o modalitate de a determina adresa IP reală a gateway-ului eth0. Am încercat „netstat -rn”, dar în această configurație ieșirea este:

 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 

Deci, cum pot determina adresa gateway-ului eth0? În cazul de mai sus, adresa efectivă a gateway-ului este 192.168.98.1.

Comentarii

  • Ce este " eth0 ' s gateway address " ar trebui să fie?
  • Interfețele nu ' t au adrese de gateway, blocurile de rețea au. O adresă de gateway îi spune nucleului unde să redirecționeze pachetele destinate unor gazde dintr-o anumită rețea. Dacă adresa este asociată cu o interfață dată, atunci va fi utilizată acea interfață, dar adresa este independentă de interfață.
  • Deci, în aplicația mea, ar trebui să fac din eth0 gateway-ul implicit dacă are conectivitate. Dar pentru a verifica conectivitatea fac o rută temporară către serverul meu cunoscut. Dar, pentru a face acest lucru, trebuie să știu adresa gateway-ului eth0 '. Deci, cum pot determina acest lucru?
  • verificați acest lucru: stackoverflow.com/a/15973156/1422630

Răspuns

Presupunem eth0 este interfața client DHCP.
O opțiune este să verificați Fișiere de închiriere client DHCP dhcpd.leases
Locul și numele depind de sistem; pe unele sisteme Fedora, fișierele de sub /var/lib/dhclient/ sunt fișiere de leasing, unde șirul interesant este așa:

 option routers 192.168.1.1; 

O altă opțiune, care a funcționat pentru mine într-o casetă funtoo: dhcpcd -U eth0
tipărește un tabel frumos, gata de sursă în scripturi

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 

Există și alte opțiuni, cum ar fi dhcping, dhclient -n, în funcție de Google și paginile de utilizare, dar nu reușesc în casetele mele, dar poate funcționa pentru dvs.

Răspuns

Greșeala dvs. este că „asociați din nou informațiile de pe ieșirea netstat cu interfața mai degrabă decât destinația. Adresele de destinație pot avea gateway-uri asociate. Când vă configurați rețeaua, asociați interfețe și gateway-uri cu seturi de adrese de destinație – deci întrebarea pe care trebuie să o puneți este „care este gateway-ul pentru destinații în 192.168.98 / 24? „Pariez că nu ar trebui să existe una, care să fie în dispozitiv la distanță sunt fie conectate direct, fie conectate la acel Ethernet.

Observați că ruta implicită este prin ppp0 (ultima linie este o rută cu caractere wildcard, masca este toate zero, deci nu sunt comparați de fapt biți, astfel încât pachetele pentru acele adrese sunt trimise prin ppp0). Deci, pachetele pentru orice destinație care nu se află în 127.xx.xx.xx sau 192.168.98.xx se vor potrivi în cele din urmă cu masca wildcard și vor fi trimise prin ppp0. Acum, pentru că este un protocol punct-la-punct, fiecare pachet trimis pe acea interfață merge la singurul dispozitiv direct adresabil pe acea legătură, cel de la celălalt capăt al acesteia. Nu este nevoie să specificați un gateway pentru acesta deoarece fiecare pachet este trimis prin intermediul acelei interfețe este trimis prin dispozitivul respectiv, indiferent dacă destinația sa de internet este acel dispozitiv sau nu.

Acum: dacă aveți un router accesibil prin eth0 pe care îl utilizați atunci când puteți, acel router are aproape sigur o adresă IP în intervalul 192.168.98.xx, cel puțin la fel de probabil ca 192.168.98.1 și când routerul respectiv este alimentat sus și de fapt conectat la Internet, doriți ca traseul dvs. implicit, cel pentru tot ce nu este conectat direct la o rețea locală, să fie default via 192.168.98.1

Este posibil să aveți mai nou (acel „termen relativ, a existat de foarte mult timp) ip comandă utilizată, încercați ip route și dacă asta vă oferă o ieșire, încercați . În caz contrar, încercați route help.


Deci, interfața dvs. eth0 pur și simplu nu are o adresă de gateway. Ar putea exista un alt dispozitiv sau mai multe dispozitive conectate la acel Ethernet care dorește să servească drept gateway. Spuneți că rețeaua dvs. are una care răspunde pe (pur convențional) .1. Nicio lege nu spune că trebuie să aibă acea adresă și nici o lege nu spune că trebuie să-și facă publicitate. Există câteva moduri comune, cea mai obișnuită dintre acestea fiind ca casetele care rulează software de rutare să ruleze și servere dhcp și să spună oricui vorbește dhcp despre ei în acest fel. Răspunsul MolbOrg oferă o aromă destul de tipică a configurării, dar orice poate sugera oricine în acest moment va fi mai mult sau mai puțin probabil să se potrivească cu particularitatea dvs. rețea.

Comentarii

  • în cazul meu gateway-ul se termină cu .129, ceea ce este destul de confuz .. se determină când este activată conexiunea USB, dar după aceea nu văd nicio modalitate de a determina asta (pentru celelalte interfețe) după un route -n (unde gateway-urile nu sunt configurate (0.0.0.0). EDIT: l-am găsit! stackoverflow.com/a/15973156/1422630

Răspuns

Linux:

Va trebui să deschideți un terminal. În funcție de distribuția Linux, acesta poate fi localizat în elementele de meniu din partea de sus sau din partea de jos a ecranului. În acest exemplu , vom folosi Fedora. Faceți clic pe Aplicații > Instrumente de sistem > Terminal.

Când terminalul este deschideți, tastați următoarea comandă: ip route | grep default

Ieșirea acestuia ar trebui să arate ca următoarea:

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

În acest exemplu, din nou, 192.168.1.1 este adresa IP a gateway-ului implicit (router).

introduceți descrierea imaginii aici

Pentru mai multe informații despre acest subiect cum să vă găsiți gateway-ul IP (linux / win / osx) .

Comentarii

  • În ciuda faptului că nu a vorbit cu " când este nu porțiunea implicită " a porțiunii întrebării, acest răspuns conține indicii de care aveam nevoie (route -n) pentru a obține adresa IP a gateway-ului pentru eth0 într-un script bash: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Răspuns

Pentru a obține numele NIC că este gateway-ul implicit, utilizați această comandă:

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

Dacă aveți mai multe NIC active pe computer, această comandă vă ajută să găsiți NIC-ul principal pe care îl are gateway-ul implicit principal.

Comentarii

  • grep XX | awk '{ action }' poate fi de obicei combinat în awk '/XX/ { action }'
  • Te rog, ia în considerare să explici ce și cum execută comanda ta
  • @ mattia.b89 Mi-am actualizat răspunsul.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *