W moim systemie mam eth0 (który może być podłączony lub nie) i modem na ppp0 (który zawsze może być włączony lub wyłączony). W przypadku, gdy oba interfejsy są włączone, a domyślną trasą jest ppp0, chciałbym znaleźć sposób na określenie rzeczywistego adresu IP bramy dla eth0. Próbowałem „netstat -rn”, ale w tej konfiguracji wyjście to:

 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 więc określić adres bramy eth0? W powyższym przypadku rzeczywisty adres bramy to 192.168.98.1.

Komentarze

  • Co to jest " Adres bramy eth0 ' " powinien być?
  • Interfejsy nie ' t mają adresy bram, a netbloki mają. Adres bramy mówi jądru, gdzie przekazywać pakiety przeznaczone dla jakiegoś hosta w jakiejś sieci. Jeśli adres jest powiązany z danym interfejsem, to ten interfejs będzie używany, ale adres jest niezależny od interfejsu.
  • Więc w mojej aplikacji mam uczynić eth0 bramą domyślną, jeśli ma łączność. Ale aby sprawdzić łączność, tworzę tymczasową trasę do mojego znanego dobrego serwera. Ale żeby to zrobić, muszę znać adres bramy eth0 '. Jak więc mogę to ustalić?
  • sprawdź to: stackoverflow.com/a/15973156/1422630

Odpowiedź

Załóżmy, że eth0 to interfejs klienta DHCP.
Jedną z opcji jest sprawdzenie Pliki dzierżawy klientów DHCP dhcpd.leases
Miejsce i nazwa zależą od systemu; w niektórych systemach Fedora pliki pod /var/lib/dhclient/ są plikami dzierżawy, gdzie interesujący ciąg jest taki:

 option routers 192.168.1.1; 

Inna opcja, która zadziałała w moim przypadku na zabawnym pudełku: dhcpcd -U eth0
wyświetla ładną tabelę, gotową do użycia w skryptach

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 

Według Google i stron podręcznika istnieją inne opcje, takie jak dhcping, dhclient -n, ale nie działają one na moich urządzeniach, ale może zadziałać dla Ciebie.

Odpowiedź

Twoim błędem jest to, że „ponownie łączysz informacje na wyjściu netstat z interfejsem zamiast miejsca docelowego. Adresy docelowe mogą mieć skojarzone bramy. Podczas konfigurowania sieci łączysz interfejsy i bramy z zestawami adresów docelowych – więc pytanie, które musisz zadać, brzmi „jaka” jest brama dla miejsc docelowych w 192.168.98 / 24? „Zakładam, że nie ma takiego, że urządzenia w th at range są albo połączone mostem, albo bezpośrednio połączone z tą siecią Ethernet.

Zauważ, że twoja domyślna trasa prowadzi przez ppp0 (ostatnia linia jest trasą wieloznaczną, maska to wszystkie zera, więc żadne bity nie są faktycznie porównywane, więc pakiety dla tych adresów są wysyłane przez ppp0). Dlatego pakiety dla dowolnego miejsca docelowego spoza 127.xx.xx.xx lub 192.168.98.xx ostatecznie dopasują się do maski wieloznacznej i zostaną wysłane przez ppp0. Teraz, ponieważ jest to protokół typu punkt-punkt, każdy pakiet wysyłany przez ten interfejs trafia do jedynego urządzenia, które można bezpośrednio adresować na tym łączu, czyli tego na drugim końcu. Nie ma potrzeby określania dla niego bramy ponieważ każdy pakiet jest wysyłany przez ten interfejs jest wysyłany przez to urządzenie, niezależnie od tego, czy jego celem w Internecie jest to urządzenie, czy nie.

Teraz: jeśli masz router dostępny przez eth0, którego używasz, kiedy możesz, ten router prawie na pewno ma adres IP z zakresu 192.168.98.xx, przynajmniej tak samo jak nie 192.168.98.1, i kiedy router jest zasilany i faktycznie połączona z Internetem, chcesz, aby Twoja domyślna trasa, ta dla wszystkiego, co nie jest bezpośrednio połączone z siecią lokalną, to default via 192.168.98.1

Możesz mieć nowszy (to „termin względny”, istnieje już od bardzo dawna) ip polecenie w użyciu, wypróbuj ip route i jeśli to daje jakieś wyjście, spróbuj . W przeciwnym razie wypróbuj route help.


Twój interfejs eth0 po prostu nie „t ma adres bramy. Może być inne urządzenie lub kilka urządzeń podłączonych do tej sieci Ethernet, które chcą służyć jako brama. Mówisz, że Twoja sieć ma takie, które odpowiada na (czysto konwencjonalny) .1. Żadne prawo nie mówi, że musi mieć ten adres, i żadne prawo nie mówi, że musi ogłaszać swoją obecność. Istnieje kilka typowych sposobów, z których najczęstszym jest to, że komputery z oprogramowaniem rutującym mogą również uruchamiać serwery dhcp i mówić w ten sposób każdemu, kto mówi o sobie dhcp. MolbOrg „odpowiedź daje dość typowy smak konfiguracji, ale wszystko, co ktokolwiek może zasugerować w tym momencie, będzie mniej lub bardziej pasować do twojego sieć.

Komentarze

  • w moim przypadku bramka kończy się na .129, co jest dość mylące. Jest to określane, gdy tethering USB jest włączony, ale potem nie widzę sposobu, aby to ustalić (dla innych interfejsów) po route -n (gdzie bramy nie są skonfigurowane (0.0.0.0). EDIT: znalazłem to! stackoverflow.com/a/15973156/1422630

Odpowiedź

Linux:

Będziesz musiał otworzyć terminal. W zależności od Twojej dystrybucji Linuksa, może on znajdować się w elementach menu u góry lub u dołu ekranu. W tym przykładzie , będziemy używać Fedory. Kliknij Aplikacje > Narzędzia systemowe > Terminal.

Gdy terminal jest otwórz, wpisz następujące polecenie: ip route | grep default

Wynik tego powinien wyglądać mniej więcej tak:

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

W tym przykładzie ponownie 192.168.1.1 to domyślny adres IP bramy (routera).

tutaj wprowadź opis obrazu

Aby uzyskać więcej informacji na ten temat, jak znaleźć adres IP bramy (linux / win / osx) .

Komentarze

  • Pomimo braku rozmowy z ", gdy jest nie jest to brama domyślna " część pytania, ta odpowiedź zawiera wskazówkę, której potrzebowałem (route -n) w celu uzyskania adresu IP bramy dla eth0 w skrypcie bash: route -n | grep "^0\.0\.0\.0" | awk '{print $2}'

Odpowiedź

Aby uzyskać nazwę karty sieciowej, która jest bramą domyślną, użyj tego polecenia:

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

Jeśli masz wiele aktywnych kart sieciowych na swoim komputerze, to polecenie pomoże ci znaleźć główną kartę sieciową, która ma główną bramę domyślną.

Komentarze

  • grep XX | awk '{ action }' można zwykle połączyć w awk '/XX/ { action }'
  • Proszę, rozważ wyjaśnienie co i jak Twoje polecenie wykonuje
  • @ mattia.b89 Zaktualizowałem swoją odpowiedź.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *