[Linux 셸 스크립트] 네트워크 - 059 호스트명으로 IP 주소 취득하기
본문 바로가기
IT 이야기/Linux 셸 스크립트

[Linux 셸 스크립트] 네트워크 - 059 호스트명으로 IP 주소 취득하기

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

(1) host

(2) awk

 

  2. 키워드 & 사용처

(1) 키워드

이름 해석, DNS, IPv4, IPv6

 

(2) 사용처

DNS 서버를 통해 이름 해석을 문의해서 해당하는 IP 주소 목록을 표시하고 싶을 때 사용합니다.

 

  3. 실행 예제
$ ./hostip.sh
Address of www.google.com
==========================
173.194.120.81 IPv4
173.194.120.80 IPv4
173.194.120.83 IPv4
173.194.120.82 IPv4
173.194.120.84 IPv4
2404:6800:4004:80c::1012 IPv6

 

 

  4. 스크립트

#!/bin/sh

 

# IP 주소를 얻고 싶은 호스트명 정의

fqdn="www.google.com"

 

echo "Address if $fqdn"

echo "===================="

 

# host 명령어로 IP 주소 얻기, awk 가공해서 출력

host $fqdn | \                         

awk '/has address/ {print $NF,"IPv4"} \         

/has IPv6 address/ {print $NF,"IPv6"}'           

 

 

  5. 해설

이 스크립트는 host 명령어를 사용해서 지정한 호스트명을 해석해서 IP 주소를 표시합니다. 실행 예제에서는 www.google.com의 IP 주소를 표시합니다. 그런데 환경에 따라서는 host 명령어를 찾을 수 없어서 에러가 발생하기도 합니다. 그럴 때는 주의사항을 살펴보고 프로그램을 설치하기 바랍니다.

 

이름 해석은 네트워크에서 호스트명의 IP 주소를 얻습니다. 예를 들어 평소에 사용하는 웹 브라우저 주소창에 http://www.example.org/라고 입력하면 컴퓨터 내부에서는 우선 DNS 서버에 문의해서 www.example.org 이름을 해석하고 결과로 203.0.113.1 같은 IP 주소를 얻은 다음 그 주소로 통신합니다. 

DNS 이름 해석

 

이런 이름 해석은 재미는 없지만 중요한 네트워크 통신 요소입니다. IP 주소로는 통신이 가능한데 호스트명을 지정했을 때 접속되지 않는다면 이름 해석이 제대로 되지 않았을 경우가 많습니다. 이런 문제를 해결하는 도구로 이 스크립트가 쓸모 있을 것입니다.

 

셸 스크립트에서 DNS 서버에 문의해서 이름 해석을 하려며 ㄴnslookup 명령어나 dig 명령어 등을 사용하는데 이번 예제에서는 표시가 간결한 host 명령어를 사용합니다. www.google.com의 host 명령어 출력 결과는 다음과 같습니다. 

$ host www.google.com
www.google.com has address 173.194.120.81
www.google.com has address 173.194.120.80
www.google.com has address 173.194.120.83
www.google.com has address 173.194.120.82
www.google.com has address 173.194.120.84
www.google.com has IPv6 address 2404:6800:4004:813::2004

 

대규모 사이트라면 부하 분산을 위해 동일한 FQDN(전체 주소 도메인 이름 : Fully Qualified Domain Name)에 여러 IP 주소를 가질 때가 많으며 www.google.com에 대해서도 여러 IP 주소가 표시됩니다. 또한 host 명령어는 대상 FQDN에 IPv6 주소도 있다면 "www.example.org has IPv6 address....." 처럼 IPv4 주소와 함께 IPv6 주소도 표시합니다.

 

awk 명령어의 두 번째 패턴은 /has IPv6 address/로 IPv6 주소를 얻습니다. IPv4 주소 때와 마찬가지로 마지막 컬럼에 IP 주소가 들어가 있으므로 이걸 awk 변수 NF로 추출해서 출력합니다.

 

 

<주의사항>

CentOS를 최소 구성으로 설치하면 host 명령어가 설치되지 않습니다. 따라서 다음처럼 yum 명령어로 bind-utils 패키지를 설치하기 바랍니다. 제대로 설치되었는지 which 명령어로 확인할 수 있습니다.

$ su
Password: 패스워드 입력
# yum install bind-utils
# exit
$ which host
/usr/bin/host

우분투에서 host 명령어는 기본적으로 설치됩니다. 만약 설치되어 있지 않으면 apt-get 명령어로 bind9-utils 패키지를 설치합니다.

host 명령어는 DNS 서버에 문의해서 이름을 해석하는 명령어입니다. 따라서 이 스크립트에서는 /etc/hosts에 적힌 설정 내용을 무시합니다.

 

 

 

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

반응형

댓글