I mitt system har jag eth0 (som kanske inte är ansluten) och ett modem på ppp0 (som alltid kan vara upp eller ner). Fallet där båda gränssnitten är uppe och ppp0 är standardvägen, jag skulle vilja hitta ett sätt att bestämma gatewayens IP-faktiska adress för eth0. Jag försökte ”netstat -rn” men i denna konfiguration är utdata: p>

 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 

Så hur bestämmer jag eth0s gateway-adress? I ovanstående fall är den faktiska gateway-adressen 192.168.98.1.

Kommentarer

  • Vad är " eth0 ' s gateway-adress " ska vara?
  • Gränssnitt don ' t har gateway-adresser, netblocks gör. En gateway-adress talar om för kärnan vart paket ska vidarebefordras för någon värd i något nätverk. Om adressen är associerad med ett visst gränssnitt kommer det gränssnittet att användas, men adressen är oberoende av gränssnittet.
  • Så i min applikation ska jag göra eth0 till standardportalen om den har anslutning. Men för att kontrollera anslutningen gör jag en tillfällig väg till min kända bra server. Men för att göra detta måste jag veta eth0 ' s gateway-adress. Så hur kan jag bestämma detta?
  • kolla detta: stackoverflow.com/a/15973156/1422630

Svar

Antag att eth0 är DHCP-klientgränssnitt.
Ett alternativ är att kontrollera Leasingfiler för DHCP-klienter dhcpd.leases
Plats och namn beror på systemet; på vissa Fedora-system är filerna under /var/lib/dhclient/ lease-filer, där den intressanta strängen är så:

 option routers 192.168.1.1; 

Ett annat alternativ, som fungerade för mig på en funtoo-ruta: dhcpcd -U eth0
skriver ut en fin tabell, redo att källa i skript

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 

Det finns andra alternativ som dhcping, dhclient -n, enligt google och manpages, men de misslyckas i mina rutor, men kan fungera för dig.

Svar

Ditt misstag är att du associerar informationen på netstat-utgången till gränssnittet snarare än destinationen. Destinationsadresser kan ha tillhörande gateways. När du konfigurerar ditt nätverk associerar du gränssnitt och gateways med uppsättningar destinationsadresser – så frågan du måste ställa är ”vad” är gatewayen för destinationer i 192.168.98 / 24? ”Jag satsar på att det inte ska vara en, att enheterna i vid räckvidd är antingen överbryggade eller direkt anslutna till det Ethernet.

Observera att din standardrutt är via ppp0 (den sista raden är en jokerteckenrutt, masken är alla noll så att inga bitar faktiskt jämförs, så paket för dessa adresser skickas via ppp0). Så paket för alla destinationer som inte finns i 127.xx.xx.xx eller 192.168.98.xx kommer så småningom att matcha jokerteckenmasken och skickas över ppp0. Eftersom det är ett punkt-till-punkt-protokoll går varje paket som skickas på det gränssnittet till den enda enheten som direkt kan adresseras på den länken, den i andra änden av den. Det finns inget behov av att ange en gateway för eftersom alla paket skickas över det gränssnittet skickas via den enheten, oavsett om dess internetdestination är den enheten eller inte.

Nu: om du har en router tillgänglig över eth0 som du använder när du kan, den routern har nästan säkert en IP-adress i intervallet 192.168.98.xx, åtminstone lika sannolikt som inte 192.168.98.1, och när den routern drivs upp och faktiskt ansluten till Internet vill du att din standardväg, den för allt som inte är direkt ansluten till ett lokalt nätverk, ska vara default via 192.168.98.1

Du kanske har nyare (det ”en relativ term, det har funnits mycket länge nu) ip kommando i användning, prova ip route och om det ger dig lite resultat, försök . Testa annars route help.


Så, ditt eth0 gränssnitt har helt enkelt inte ”t en gateway-adress. Det kan finnas en annan enhet eller flera enheter anslutna till nätet som är villiga att fungera som en gateway. Du säger att ditt nätverk har en som svarar på (rent konventionella) .1. Ingen lag säger att den måste ha den adressen, och ingen lag säger att den måste marknadsföra sin närvaro. Det finns några vanliga sätt, det vanligaste av dem är att lådor som kör routing-programvara också kör dhcp-servrar och berättar för alla som talar dhcp om sig själva på det sättet. MolbOrgs svar ger en ganska typisk smak av installationen, men allt som någon kan föreslå just nu kommer bara att vara mer eller mindre troligt att matcha just din nätverk.

Kommentarer

  • i mitt fall slutar gatewayen med .129 som är ganska förvirrande .. det bestäms när USB-delning är aktiverad men efter det ser jag inget sätt att fastställa det (för de andra gränssnitten) efter en route -n (där gateways inte är konfigurerade (0.0.0.0). EDIT: hittade det! stackoverflow.com/a/15973156/1422630

Svar

Linux:

Du måste öppna en terminal. Beroende på din Linux-distribution kan den finnas i menyalternativen högst upp eller längst ner på skärmen. I det här exemplet kommer vi att använda Fedora. Klicka på applikationer > Systemverktyg > Terminal.

När terminalen är öppna, skriv följande kommando: ip route | grep default

Utgången från detta ska se ut som följande:

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

I detta exempel är 192.168.1.1 återigen din standard-gateway (router) IP-adress.

ange bildbeskrivning här

För mer information om detta ämne hur du hittar din gateway-IP (linux / win / osx) .

Kommentarer

  • Trots att vi inte pratade med " när det är inte standardgateway " del av frågan, detta svar innehåller det tips jag behövde (route -n) för att få gatewayens IP-adress för eth0 i ett bash-skript: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Svar

För att få NIC-namnet att det är standardgateway, använd detta kommando:

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

Om du har flera aktiva nätverkskort på din maskin hjälper det här kommandot dig att hitta huvudnätverket som har den huvudsakliga standardgatewayen.

Kommentarer

  • grep XX | awk '{ action }' kan vanligtvis sammanföras till awk '/XX/ { action }'
  • Vänligen överväg att förklara vad och hur ditt kommando utför
  • @ mattia.b89 Jag uppdaterade mitt svar.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *