Próbuję uzyskać domyślną bramę, używając miejsca docelowego 0.0.0.0
użyłem tego polecenia: netstat -rn | grep 0.0.0.0
i zwraca tę listę:
Destination - Gateway - Genmask - Flags - MSS - Window - irtt - Iface
10.9.9.17 - 0.0.0.0 - 255.255.255.255 - UH - 0 0 0 - tun0
133.88.0.0 - 0.0.0.0 - 255.255.0.0 - U - 0 0 0 - eth0
0.0.0.0 - 133.88.31.70 - 0.0.0.0 - UG - 0 0 0 - eth0
Moim celem jest pingowanie domyślnej bramy przy użyciu miejsca docelowego 0.0.0.0; czyli „133.88.31.70”; ale ta zwraca listę z powodu użycia 'grep'.
Pytanie brzmi: jak uzyskać tylko domyślną bramę? Będę go potrzebować do skryptu bash, aby ustalić, czy połączenie sieciowe działa.
ip
. W rzeczywistościip route show
jest to alias dlaip route list
i możesz sprawdzić,man ip
czy ta podkomenda ma składnięip route { list | flush } SELECTOR
... I żaden z wymienionych poprawnych selektorów nie jestdefault
. Czuję, żeip route show table default
powinienem robić to, co chcemy, ale niestety tak nie jest. Do kogokolwiek innego, dopasuj również początek linii (zostałeś ostrzeżony):ip route show | awk '/^default/{print $3}'
To polecenie jest znacznie szybsze niż
ip route | grep
domyślne w systemie z wieloma (ponad 10000) trasamiSpójrz na przykład z mojego routera z pełnym BGP i ręczną domyślną trasą jako kopię zapasową
ip route show default show
dla mnie wszystkie trasy to nie tylko domyślna trasaip route get
nie akceptuje wartości domyślnej lub 0.0.0.0/0 jako parametruźródło
ip route show default
powinieneś zrobić lewą bramę domyślną lub możesz użyć,ip route get <someip>
aby zobaczyć, jaka jest trasa dla określonego adresu IP.źródło
Jeśli chcesz to zrobić za pomocą
netstat
(aby działało na czymś, co NIE jest Linuksem ), ogólne rozwiązanie to:netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'
Pokazuje tablice routingu, wykorzystując adresy IP zamiast rozpoznawania nazw hostów (
netstat -rn
),szuka domyślnej bramy (linie rozpoczynające się od
0.0.0.0
lubdefault
)i drukuje host bramy (drugie pole wyników).
Liczba
\
znaków w wyrażeniu regularnym jest znacząca:\(
i\)
określ grupę\|
jest znakiem naprzemiennym (rzecz po lewej lub rzecz po prawej pasuje)\.
- co oznacza dosłowny znak.
w przeciwieństwie do wyrażenia regularnego.
(dopasowanie dowolnego pojedynczego znaku)źródło
grep -e
lubegrep
też wykonałby lewę bez potrzeby ucieczki nawiasów i ruryegrep '^(default|0\.0\.0\.0)'
Tak to robię:
źródło
Czy to tutaj?
źródło
grep default
kiedy już podałeśdefault
trasę w swoimip
poleceniu?BARDZO łatwy sposób ... zapytaj tablicę routingu, w jaki sposób dostaje się do adresu IP poza siecią
Google DNS == 8.8.8.8
ip route get 8.8.8.8
źródło
lub
lub
lub
lub
Jeśli dobrze to rozumiem, domyślne wyszukiwanie bramy dla tej dokładnej trasy - trasy z zerami - to albo 0.0.0.0/0.0.0.0 (lub 0/0) dla IPv4, albo 0000: 0000: 0000: 0000: 0000: 0000 : 0000: 0000 (lub: :) dla IPv6.
Jednak (!), Nie określając AF, którego chcesz używać (-4 lub -6 lub -f inet lub -f inet6), ani nie podając trasy zerowej jako prefiksu IPv4 lub IPv6 (0/0 oznacza IPv4) , nie może ustalić, co to jest „domyślna” ...
Osobiście nie wydaje mi się, żeby strona podręcznika była bardzo jasna, ale to tylko moje dwa centy.
źródło