Linux 환경 IP 정보를 가져와 활용하기

송 희문·2021년 3월 3일
0
post-thumbnail

업무를 진행하다가 IP를 가져와서 Config 파일을 수정해주는 작업이 필요해서 작업을 하였는데, 작업을 하면서 생긴 문제점과 방안을 이 글을 통해 남기고자 합니다.

OS환경에 따른 IP 정보 가져오는 방법

기본적으로 우리는 IP를 가져올 때 아래와 같이 ifconfig 명령어를 사용해서 가져올 것이다.

h2m8nui-MacBookPro:server h2m8n$ ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 

위 예시는 MacOS BigSur 환경에서 사용하였습니다. ( IP는 루프백 보안상 루프백 주소 )

하지만 CentOS 7 부터는 ifconfig를 기본적으로 제공하지 않습니다.
그래서 아래와 같이 명령어를 사용하여야 합니다.

[root@localhost ~]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever

OS따라 명령어가 다른데, 범용성을 가지고 쓸 수는 없을까?

[root@localhost ~]# hostname --all-ip-addresses
127.0.0.1 

내가 필요한 정보는 IP뿐만이었는데, 이렇게 IP만 딱 나오니 너무 기분이 좋았다.
하지만 도커 컨테이너 환경에서 경량화된 OS를 사용하다보니, hostname 명령어가 없는 경우를 발견하였다. 그래서 편리함을 뒤로 무릎쓰고 다시 원점으로 돌아갔다.

ifconfig, ip addr 명령어를 통해 어떻게 IP정보만 가져올 수 있을까?

h2m8nui-MacBookPro:server h2m8n$ ifconfig -a
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
	options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
	inet 127.0.0.1 netmask 0xff000000 
	inet6 ::1 prefixlen 128 
	inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 

1 . 우선 장비명을 알아야 했다. 왜냐하면 NIC장비 정보가 시스템마다 다르기 때문에, IP정보를 정확하게 가져오려면 담당자가 NIC정보를 알고있어야 했다.

ifconfig eth0

ip addr show eth0
  1. 그리고 inet을 포함한 라인이며, inet6는 검색에서 제외되어야 한다.
grep inet | grep -v inet6
  1. ip의 경우 뒤에 /24 와 같은 서브넷마스크가 붙을 수 있어, 공백으로 치환해준다.
ifconfig eth0 | grep inet | grep -v inet6 | sed -e 's/\// /g' 
  1. 그리고 검색된 문자열을 잘라서 가져온다.
ifconfig eth0 | grep inet | grep -v inet6 | sed -e 's/\// /g' | awk '{print $2}'

오늘 여러가지 테스트를 해보았다. OS환경마다 명령어 차이도 있기도 하고, 불편한 점도 있을 것이다.
각 환경에 맞게 스크립트를 작성하여서 사용하면 편리할 것 같다.

profile
Software Engineer

0개의 댓글