[Linux 셸 스크립트] 네트워크 - 056 디폴트 게이트웨이에 ping이 통하는지 확인하기(FreeBSD/Mac)
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 네트워크 - 056 디폴트 게이트웨이에 ping이 통하는지 확인하기(FreeBSD/Mac)

by 찬찬이 아빠 2021. 3. 30.
반응형
  1. 사용 명령어

(1) netstat

(2) awk

(3) ping

 

 

  2. 키워드 & 사용처

(1) 키워드

ping, ICMP, 디폴트 게이트웨이

 

(2) 사용처

디폴트 게이트웨이를 자동으로 얻어서 ping 명령어로 네트워크 연결을 확인하고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./gwping-bsd.sh
[Success] ping -> 192.168.1.1

 

 

  4. 스크립트

#!/bin/sh

 

# netstat 명령어 출력에서 디폴트 게이트웨이 얻기

# 첫 번째 컬럼이 default인 줄의 두 번째 컬럼 추출

gateway=$(netstat -nr | awk '$1 == "default" {print $2}')         

 

# 디폴트 게이트웨이에 ping

ping -c 1 $gateway > /dev/null 2>&1                 

 

# ping 명령어 종료 스테이터스로 판단

if [ $? -eq 0 ]; then              ③

    echo "[Success] ping -> $gateway"

else

    echo "[Failed] ping -> $gateway"

fi

 

 

  5. 해설

이 스크립트는 FreeBSD나 Mac 머신에서 디폴트 게이트웨이와의 네트워크 연결을 확인합니다. ping 명령어로 ICMP 패킷을 보내서 네트워크가 정상적으로 통신 가능한지 확인합니다. ping 명령어로 디폴트 게이트웨이와 통신을 확인합니다.

 

리눅스에서는 루팅 테이블을 표시하기 위해 인수 없이 route 명령어를 사용했지만 BSD 계열에서는 같은 명령어를 사용하면 에러가 발생합니다.

 

이것은 route 명령어 사양이 서로 달라서인데 BSD 계열 route 명령어는 경로를 제어하는 명령어로 단순히 루팅 테이블을 표시하는 용도로는 사용하지 않습니다.

 

BSD 계열에서 디폴트 게이트웨이를 조사하려면 netstat 명령어를 사용합니다. netstat 명령어는 현재 네트워크 접속 상태를 표시할 때 자주 사용하는데 -r 옵션으로 현재 경로 테이블을 표시합니다.

 

다음 출력 예제에서 IPv4 주소만 다루기 위해 IPv6 주소를 생략했습니다. 호스트명을 표시하지 않고 IP 주소만 표시하도록 -n 옵션도 같이 사용합니다.

% netstat -nr
Routing tables

Internet:
Destination	Gateway		Flags	Refs	Use	Netif Expire
default		192.168.1.1	UGS	0	0	em0
192.168.1.0/2	link#1		U	0	1111	em0
127.0.0.1	link#5		UH	0	18	lo0

Internet6:
... 생략 ...

여러 항목이 있지만 Destination과 Gateway 값을 사용합니다. Destination은 상대 네트워크를 나타내는데 디폴트 게이트웨이를 취득하려면 default 줄을 읽습니다. Gateway가 192.168.1.1 이므로 192.168.1.1이 머신의 디폴트 게이트웨이입니다.

 

리눅스 때와 거의 같은 내용이므로 awk 명령어로 추출해서 ping을 실행합니다.

 

 

참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전

반응형

댓글