대상이 주어진 리눅스에서 기본 게이트웨이를 어떻게 얻습니까?


11

대상 0.0.0.0을 사용하여 기본 게이트웨이를 얻으려고합니다.

이 명령을 사용했습니다 : netstat -rn | grep 0.0.0.0

그리고이 목록을 반환합니다 :

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

여기서 목표는 대상 0.0.0.0을 사용하여 기본 게이트웨이를 ping하는 것입니다. 따라서 "133.88.31.70"입니다. 그러나 이것은 'grep'을 사용하기 때문에 목록을 반환합니다.

질문은 : 기본 게이트웨이 만 어떻게 얻습니까? bash 스크립트가 인터넷 연결이 작동했는지 여부를 식별하는 데 필요합니다.

답변:


21
DEFAULT_ROUTE=$(ip route show default | awk '/default/ {print $3}')
ping -c 1 $DEFAULT_ROUTE

문제가 해결 될 것입니다.


@Suezy Ha! 보다? 어 wk!
Jeremy Powell

마지막에 작은 따옴표를 닫고 닫는 대괄호가 일치한다고 생각합니다. 그렇지 않으면 훌륭하게 작동합니다!
Mark K Cowan

3
이 명령으로 온라인에서 꽤 많은 답변을 보았지만 그 중 "show default"가 사용되는 이유는 설명하지 않았습니다. 실제로 매개 변수가없는 "ip route show"는 나에게 똑같은 일을합니다. 그래서 내 질문은 왜 명령에 "default"가 있습니까? 무슨 뜻이에요?
user658991

@ user658991 나는이 토끼 구멍을 밟았고 당신은 정확히 맞습니다. 가장 일반적인 버전 에서는 아무것도 하지 않습니다ip . 실제로 ip route show는 별명 이며이 부속 명령에 구문이 ip route list있는지 확인할 수 있습니다 . 그리고 유효한 선택기 중 하나만있는 것은 아닙니다 . 나는 우리가 원하는 것을 해야한다고 생각하지만 불행히도 그렇지 않습니다. 다른 사람에게도 줄의 시작 부분도 일치시킵니다 (경고를 man ipip route { list | flush } SELECTORdefaultip route show table default ip route show | awk '/^default/{print $3}'
받았습니다

5
 ip route show default 0.0.0.0/0

이 명령은 ip route | grep많은 (10000+) 경로를 가진 시스템에서 기본값 보다 훨씬 빠릅니다.

백업으로 전체 BGP 및 수동 기본 경로가있는 라우터에서 예를 찾으십시오.

router:~# time ip route show default 0.0.0.0/0
default via XXX.XXX.192.254 dev eth0.123 

real    0m0.707s
router:~# time ip route | grep default
default via XXX.XXX.192.254 dev eth0.123 

real    0m8.596s
  • 때문에 ip route show default show나뿐만 아니라 기본 경로에 대한 모든 경로
  • 매개 변수로 기본값 또는 0.0.0.0/0ip route get허용하지 않기 때문에

를 통해 직접 기본 필터링을 보여 +1 iproute2를 ! 이 놀라운 유틸리티 제품군 (틀림없이 창조) 기존 리눅스 textfu보다 더 정확하고 안정적이고 성능이 좋은 곳에 많은 경우가 있습니다
RubyTuesdayDONO

1
이것은 좋은 답변입니다! 그러나 나는 여전히 iproute2의 문서에 약간 혼란 스럽습니다. 명령에서 "기본"은 무엇을 의미합니까? 문서를 올바르게 읽고 있다면이 명령은 "ip route show to default 0/0"과 같아야합니다. 맞습니까? "0/0"형식은 무엇입니까?
user658991

3

ip route show default기본 게이트웨이에 대한 트릭을 수행하거나 ip route get <someip>특정 IP 주소의 경로를 확인하는 데 사용할 수 있습니다 .


ip route를 시도했는데 모든 게이트웨이에 대한 목록이 표시됩니다. 그렇습니다. 기본 게이트웨이도 맨 아래에 표시됩니다. 고마워 =) 그러나 나의 목표는 기본 게이트웨이에 사용되는 IP 주소를 얻는 것입니다. bash 스크립트를 사용하여 해당 스크립트를 ping하여 작동 여부를 확인합니다.
Suezy

"기본값 표시"에 대한 네 개의 항목이 있습니다. "ip route show default | awk '/ default / {print $ 3}'"은 IP 주소 만 가져옵니다.
David Pashley

2

이것을 사용하여 이것을 원한다면 netstat(그렇지 않은 것은 리눅스 에서 작동합니다 ) 일반적인 해결책은 다음과 같습니다.

netstat -rn | grep '^\(default\|0\.0\.0\.0\)' | awk '{print $2}'

이 쇼 라우팅 테이블을, IP를 사용하는 대신 호스트 이름을 (해결 netstat -rn),
기본 게이트웨이 외모 (라인으로 시작 0.0.0.0또는 default),
및 게이트웨이 호스트 (결과의 두 번째 필드)를 인쇄합니다.

\정규 표현식에서 문자 의 확산 은 중요합니다.

  • \(\)그룹을 지정할
  • \| 대체 문자 (왼쪽 또는 오른쪽에있는 것)
  • IP 주소의 점은로 표현됩니다 . 정규식이 아닌 \.리터럴 문자 .를 의미합니다 .(단일 문자와 일치).

1
grep -eegrep또한 브라켓과 파이프를 필요없이 트릭을 할 것 이스케이프 할egrep '^(default|0\.0\.0\.0)'
마크 K 코완에게

1

이것이 내가하는 방법입니다.

#!/bin/sh
GATEWAY_DEFAULT=$(ip route list | sed -n -e "s/^default.*[[:space:]]\([[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\.[[:digit:]]\+\).*/\1/p")
echo ${GATEWAY_DEFAULT}

1
 ip route show default | grep default | awk {'print $3'}

여기에 있습니까


명령에 경로 grep default를 이미 지정했을 때 왜 ? defaultip
lindhe

0

매우 쉬운 방법 ... 라우팅 테이블에 네트워크 외부의 IP로가는 방법 문의

구글 DNS == 8.8.8.8

ip 경로는 8.8.8.8을 얻습니다


0
ip route show 0/0

또는

ip route show 0.0.0.0/0

또는

ip route show 0.0.0.0/0.0.0.0

또는

ip -f inet route show default

또는

ip -4 route show default

올바르게 이해하면 정확한 경로 (0이 아닌 모든 경로)의 기본 게이트웨이 조회는 IPv4의 경우 0.0.0.0/0.0.0.0 (또는 0/0) 또는 0000 : 0000 : 0000 : 0000 : 0000 : 0000 : 0000입니다. IPv6의 경우 : 0000 : 0000 (또는 : :).

그러나 사용하려는 AF (-4 또는 -6 또는 -f inet 또는 -f inet6)를 지정하지 않거나 모든 제로 경로를 IPv4 또는 IPv6 접두사로 지정하지 않고 (0/0은 IPv4를 의미 함) '기본'이 무엇인지 알 수 없습니다 ...

개인적으로, 나는 man 페이지가 이것에 대해 매우 명확하다고 생각하지 않지만, 그것은 단지 2 센트입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.