V mém systému mám ether0 (který může nebo nemusí být připojen) a modem na ppp0 (který může být vždy nahoru nebo dolů). V případě, že jsou obě rozhraní nahoře a ppp0 je výchozí trasa, chtěl bych najít způsob, jak zjistit skutečnou adresu IP brány eth0. Zkoušel jsem „netstat -rn“, ale v této konfiguraci je výstup:

 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 

Jak tedy zjistím adresu brány eth0? Ve výše uvedeném případě je skutečná adresa brány 192.168.98.1.

Komentáře

  • Co je " adresa brány eth0 ' s " má být?
  • Rozhraní don ' nemají adresy brány, síťové bloky ano. Adresa brány říká jádru, kam má přeposílat pakety určené pro nějakého hostitele v nějaké síti. Pokud je adresa přidružena k danému rozhraní, bude toto rozhraní použito, ale adresa je nezávislá na rozhraní.
  • Takže v mé aplikaci mám z výchozí brány udělat eth0, pokud má připojení. Ale abych zkontroloval připojení, udělám dočasnou cestu na můj známý dobrý server. Ale k tomu potřebuji znát adresu brány eth0 ' s. Jak to tedy mohu zjistit?
  • zaškrtněte toto: stackoverflow.com/a/15973156/1422630

Odpověď

Předpokládejme, že eth0 je klientské rozhraní DHCP.
Jednou z možností je zkontrolovat Soubory k zapůjčení klienta DHCP dhcpd.leases
Místo a název závisí na systému; na některých systémech Fedora jsou soubory pod /var/lib/dhclient/ leasingovými soubory, kde je zajímavý takový řetězec:

 option routers 192.168.1.1; 

Další možnost, která pro mě fungovala na krabičce s funtoo: dhcpcd -U eth0
vytiskne pěknou tabulku připravenou ke zdroji ve skriptech

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 

Podle google a manpages existují další možnosti jako dhcping, dhclient -n, ale na mých polích selžou, ale může pracovat pro vás.

Odpověď

Vaše chyba je v tom, že přiřazujete informace o výstupu netstatu k rozhraní spíše než cíl. Cílové adresy mohou mít přidružené brány. Když konfigurujete svou síť, spojujete rozhraní a brány se sadami cílových adres – takže otázkou, kterou si musíte položit, je „jaká“ je brána pro cíle v 192.168.98 / 24? „Vsadím se, že by neměla být žádná, ta zařízení v th v dosahu jsou buď přemostěné, nebo přímo připojené k tomuto ethernetu.

Všimněte si, že vaše výchozí trasa je přes ppp0 (poslední řádek je cesta se zástupnými znaky, maska je celá nula, takže ve skutečnosti nejsou porovnávány žádné bity, takže pakety pro tyto adresy jsou odesílány prostřednictvím ppp0). Pakety pro libovolný cíl, které nejsou v 127.xx.xx.xx nebo 192.168.98.xx, se nakonec shodují s maskou zástupných znaků a budou odeslány přes ppp0. Nyní, protože jde o protokol typu „point-to-point“, jde každý paket odeslaný na tomto rozhraní do jediného zařízení přímo adresovatelného na tomto odkazu, na jeho druhý konec. Není nutné pro něj specifikovat bránu protože každý paket je odeslán přes toto rozhraní je odeslán přes toto zařízení, ať už je jeho internetovým cílem toto zařízení nebo ne.

Nyní: pokud máte router přístupný přes eth0 který používáte, kdykoli můžete, má tento router téměř jistě IP adresu v rozsahu 192.168.98.xx, přinejmenším stejně pravděpodobnou, jako není 192.168.98.1, a když je tento router napájen a skutečně připojené k internetu chcete, aby vaše výchozí trasa, ta pro vše, co není přímo připojeno k místní síti, byla default via 192.168.98.1

Možná máte novější (tento relativní výraz je již velmi dlouhou dobu) ip používaný příkaz, zkuste ip route a pokud vám to dá nějaký výstup, zkuste . Jinak zkuste route help.


Takže vaše eth0 rozhraní prostě nemá adresa brány. K tomuto ethernetu může být připojeno další zařízení nebo několik zařízení ochotných sloužit jako brána. Říkáte, že vaše síť má jedno, které odpovídá na (čistě konvenční) .1. Žádný zákon neříká, že musí mít tuto adresu, a žádný zákon neříká, že musí inzerovat jeho přítomnost. Existuje několik běžných způsobů, z nichž nejběžnější je, aby boxy se směrovacím softwarem také spouštěly servery dhcp a říkaly tak každému, kdo o sobě mluví dhcp. Odpověď MolbOrg dává docela typickou příchuť nastavení, ale vše, co kdokoli může v tomto okamžiku navrhnout, bude jen víceméně pravděpodobně odpovídat vašemu konkrétnímu síť.

Komentáře

  • v mém případě brána končí číslem .129, což je docela matoucí .. určuje se, když je povoleno tethering USB poté nevidím žádný způsob, jak to určit (pro ostatní rozhraní) po route -n (kde brány nejsou nakonfigurovány (0.0.0.0). EDIT: našel to! stackoverflow.com/a/15973156/1422630

odpověď

Linux:

Budete muset otevřít Terminál. V závislosti na vaší distribuci Linuxu může být umístěn v položkách nabídky v horní nebo dolní části obrazovky. V tomto příkladu , použijeme Fedoru. Klikněte na Aplikace > Systémové nástroje > Terminál.

Když je terminál otevřete, zadejte následující příkaz: ip route | grep default

Výsledek by měl vypadat přibližně takto:

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

V tomto příkladu je 192.168.1.1 vaší výchozí adresou IP brány (routeru).

zde zadejte popis obrázku

Další informace o tomto tématu jak najít adresu IP vaší brány (linux / win / osx) .

Komentáře

  • Přestože nemluví ", když je není výchozí brána " část otázky, tato odpověď obsahuje nápovědu, kterou jsem potřeboval (route -n) k získání adresy IP brány pro eth0 ve skriptu bash: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

odpověď

Chcete-li získat název NIC, že je to výchozí brána, použijte tento příkaz:

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

Pokud máte na svém počítači více aktivních NIC, tento příkaz vám pomůže najít hlavní NIC, které má hlavní výchozí bránu.

Komentáře

  • grep XX | awk '{ action }' lze obvykle sloučit do awk '/XX/ { action }'
  • Zvažte prosím vysvětlení co a jak váš příkaz funguje
  • @ mattia.b89 Aktualizoval jsem svou odpověď.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *