Nel mio sistema ho eth0 (che può essere connesso o meno) e un modem su ppp0 (che può essere sempre attivo o inattivo). Nel caso in cui entrambe le interfacce siano attive e ppp0 sia la route predefinita, mi piacerebbe trovare un modo per determinare lindirizzo IP effettivo del gateway di eth0. Ho provato “netstat -rn” ma in questa configurazione loutput è:
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
Allora come determino lindirizzo del gateway di eth0? Nel caso precedente, lindirizzo effettivo del gateway è 192.168.98.1.
Commenti
- Che cosè " eth0 ' s indirizzo gateway " dovrebbe essere?
- Interfacce don ' t ha indirizzi gateway, i netblock sì. Un indirizzo gateway dice al kernel dove inoltrare i pacchetti destinati a qualche host su qualche rete. Se lindirizzo è associato a una data interfaccia, verrà utilizzata quellinterfaccia, ma lindirizzo è indipendente dallinterfaccia.
- Quindi nella mia applicazione dovrei rendere eth0 il gateway predefinito se ha connettività. Ma per controllare la connettività, creo un percorso temporaneo al mio noto buon server. Ma per fare questo ho bisogno di conoscere lindirizzo del gateway di eth0 '. Allora come posso determinarlo?
- seleziona questo: stackoverflow.com/a/15973156/1422630
Risposta
Supponiamo che eth0
sia linterfaccia client DHCP.
Unopzione è controllare il File di leasing del client DHCP dhcpd.leases
Il luogo e il nome dipendono dal sistema; su alcuni sistemi Fedora, i file in /var/lib/dhclient/
sono file in leasing, dove la stringa interessante è così:
option routers 192.168.1.1;
Unaltra opzione, che ha funzionato per me su un funtoo box: dhcpcd -U eth0
stampa una bella tabella, pronta per essere trovata negli script
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
Ci sono altre opzioni come dhcping
, dhclient -n
, secondo google e manpage, ma non funzionano sulle mie scatole, ma potrebbe funzionare per te.
Risposta
Il tuo errore è che stai “associando le informazioni sulloutput di netstat con linterfaccia anziché la destinazione. Gli indirizzi di destinazione possono avere gateway associati. Quando configuri la tua rete, stai “riassociando interfacce e gateway con insiemi di indirizzi di destinazione, quindi la domanda che devi porre è” qual è il gateway per le destinazioni in 192.168.98 / 24? “Scommetto che non dovrebbe essercene uno, che i dispositivi in th a distanza sono collegati a ponte o direttamente collegati a tale ethernet.
Si noti che la rotta predefinita è tramite ppp0
(lultima riga è una rotta con caratteri jolly, la maschera è tutto zero quindi nessun bit viene effettivamente confrontato, quindi i pacchetti per quegli indirizzi vengono inviati tramite ppp0
). Pertanto, i pacchetti per qualsiasi destinazione non in 127.xx.xx.xx
o 192.168.98.xx
alla fine corrisponderanno alla maschera del carattere jolly e verranno inviati tramite ppp0
. Ora, poiché è un protocollo point-to-point, ogni pacchetto inviato su quellinterfaccia va allunico dispositivo direttamente indirizzabile su quel collegamento, quello allaltra estremità di esso. Non cè bisogno di specificare un gateway per esso perché ogni pacchetto viene inviato su quellinterfaccia viene inviato tramite quel dispositivo, indipendentemente dal fatto che la sua destinazione Internet sia quel dispositivo o meno.
Ora: se hai un router accessibile tramite eth0
che usi quando puoi, quel router ha quasi certamente un indirizzo IP nellintervallo 192.168.98.xx, almeno altrettanto probabile che non 192.168.98.1, e quando il router è alimentato ed effettivamente connesso a Internet, vuoi che il tuo percorso predefinito, quello per tutto ciò che non è connesso direttamente a una rete locale, sia default via 192.168.98.1
Potresti avere il più recente (che “è un termine relativo, è in circolazione da molto tempo ormai) ip
comando in uso, prova ip route
e se questo ti dà qualche risultato prova . Altrimenti, prova route help
.
Quindi, la tua interfaccia eth0
semplicemente “t non ha un indirizzo gateway. Potrebbero esserci un altro dispositivo o più dispositivi collegati a tale Ethernet che desiderano fungere da gateway. Dici che la tua rete ne ha uno che risponde sul (puramente convenzionale) .1
. Nessuna legge dice che deve avere quellindirizzo e nessuna legge dice che deve pubblicizzare la sua presenza. Ci sono alcuni modi comuni, il più comune dei quali è che le scatole che eseguono software di routing eseguano anche server dhcp e comunicano a chiunque parli di se stessi in questo modo.La risposta di MolbOrg “ offre un aspetto piuttosto tipico della configurazione, ma qualsiasi cosa chiunque possa suggerire a questo punto avrà più o meno probabilità di corrispondere rete.
Commenti
- nel mio caso il gateway termina con .129 che è abbastanza confuso .. viene determinato quando il tethering usb è abilitato ma dopo di che non vedo alcun modo per determinarlo (per le altre interfacce) dopo un
route -n
(dove i gateway non sono configurati (0.0.0.0). EDIT: trovato! stackoverflow.com/a/15973156/1422630
Risposta
Linux:
dovrai aprire un terminale. A seconda della tua distribuzione Linux, può essere posizionato nelle voci di menu in alto o in basso sullo schermo. In questo esempio , useremo Fedora. Fai clic su Applicazioni > Strumenti di sistema > Terminal.
Quando il terminale è apri, digita il seguente comando: ip route | grep default
Loutput di questo dovrebbe essere simile al seguente:
joe$ ip route | grep default default via 192.168.1.1 dev eth0 proto static
In questo esempio, ancora una volta, 192.168.1.1 è lindirizzo IP del gateway predefinito (router).
Per ulteriori informazioni su questo argomento come trovare il tuo IP gateway (linux / win / osx) .
Commenti
- Nonostante non abbia parlato con " quando è non il gateway predefinito " parte della domanda, questa risposta contiene il suggerimento di cui avevo bisogno (
route -n
) per ottenere lindirizzo IP del gateway per eth0 in uno script bash:route -n | grep "^0\.0\.0\.0" | awk '{print $2}'
Risposta
Per ottenere il nome NIC che è il gateway predefinito, utilizza questo comando:
netstat -rn | grep -m 1 UG | awk "{print $8}"
Se hai più NIC attive sulla tua macchina, questo comando ti aiuta a trovare la NIC principale che ha il gateway predefinito principale.
Commenti
-
grep XX | awk '{ action }'
di solito può essere unito inawk '/XX/ { action }'
- Per favore, considera di spiegare cosa e come esegue il tuo comando
- @ mattia.b89 Ho aggiornato la mia risposta.