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을 실행합니다.
참고서적 : 유닉스 리눅스 셸 스크립트 예제 사전
'IT 이야기 > Linux 셸 스크립트' 카테고리의 다른 글
[Linux 셸 스크립트] 네트워크 - 058 arp 테이블에서 지정 IP 주소에 대응하는 MAC 주소를 표시하기 (0) | 2021.03.31 |
---|---|
[Linux 셸 스크립트] 네트워크 - 057 ping으로 특정 호스트 응답 평균 시간을 취득하기 (0) | 2021.03.30 |
[Linux 셸 스크립트] 네트워크 - 055 디폴트 게이트웨이에 ping이 통하는지 확인하기(리눅스) (0) | 2021.03.29 |
[Linux 셸 스크립트] 날짜 처리 - 054 윤년인지 확인하기 (0) | 2021.03.29 |
[Linux 셸 스크립트] 날짜 처리 - 053 한 달 전에 만든 로그 파일을 일괄 아카이브 하기 (0) | 2021.03.29 |
댓글