Linux Bash 스크립트에서 공개 IP를 얻는 방법

게시 됨: 2022-11-12
Linux 명령 프롬프트를 보여주는 파란색 배경의 노트북.
Fatmawati achmad zaenuri/Shutterstock.com
"curl -s ifconfig.me"와 같은 curl 명령을 사용하여 웹사이트에서 외부 IP를 가져올 수 있습니다. 그러나 웹사이트는 변경될 수 있습니다. 보다 안정적인 답변을 얻으려면 "dig @resolver1.opendns.com myip.opendns.com +short"와 같은 dig 명령을 대신 사용하여 DNS 서버에서 IP를 가져옵니다.

컴퓨터에 원격으로 연결하려면 외부 IP 주소가 필요합니다. 수동으로 찾는 것은 쉽지만 Linux 스크립트 내에서 찾는 방법은 다음과 같습니다.

내부 및 외부 IP 주소

인터넷 프로토콜 주소는 네트워크에서 장치를 식별하는 데 사용됩니다. 단일 장치에 할당된 네트워크의 고유한 레이블입니다. 다른 장치가 해당 장치에 데이터를 보내려는 경우 해당 장치의 IP 주소를 사용하여 전송할 수 있습니다.

IP 주소는 어떻게 작동합니까?
관련 IP 주소는 어떻게 작동합니까?

광대역 모뎀에는 장치에서 장치로 네트워크 주변의 네트워크 트래픽을 전달하는 네트워크 라우터가 내장되어 있습니다. 장치가 네트워크에 가입할 때 장치에 IP 주소를 할당하는 것도 로컬 기관입니다. 또한 네트워크 이름 및 IP 주소 테이블을 유지 관리합니다. 이렇게 하면 네트워크의 컴퓨터에 의미 있는 이름을 지정할 수 있습니다. 사람의 경우 이름은 숫자 목록보다 작업하기 쉽기 때문입니다.

인터넷 의 장치에도 IP 주소가 있습니다. 그들 중 일부는 웹사이트와 같은 이름도 가지고 있습니다. 도메인 이름 서비스 제공업체는 웹사이트 도메인 이름을 찾아 자동으로 IP 주소로 교환합니다.

광대역 모뎀에는 인터넷 서비스 공급자(ISP)가 자체 인터넷 연결 또는 외부 IP 주소를 제공합니다. 집에 인터넷에 연결된 장치의 수에 관계없이 결합된 트래픽은 모두 해당 단일 IP 주소를 통해 전송됩니다.

다른 지역에 있는 경우 집에 있는 컴퓨터 중 하나에서 실행 중인 서비스에 연결하려면 외부 IP 주소를 사용해야 합니다. 물론 라우터는 집 안의 적절한 장치로 연결 요청을 라우팅하도록 설정해야 합니다.

고정 IP 주소에 대해 매월 ISP에 약간의 추가 비용을 지불하지 않는 한 외부 IP 주소는 수시로 변경될 수 있습니다. 광대역 모뎀을 재부팅하면 다른 외부 IP 주소를 얻을 수 있습니다. 따라서 외부 IP 주소를 알아야 하는 경우 한 번만 확인하고 저장할 수 없습니다. 그것이 무엇인지 주기적으로 확인해야 합니다.

외부 IP 주소 찾기

외부 IP 주소를 발견한다는 것은 네트워크 외부에 있는 것과 대화하는 것을 의미합니다. 다시 말해, 우리가 원하는 정보를 제공할 수 있는 인터넷에 액세스하는 것입니다. 우리는 허공을 들여다보고 무엇이 우리를 뒤돌아보고 있는지 볼 필요가 있습니다. 그런 다음 외부 주소를 요청합니다.

두 가지 방법이 있습니다. 한 가지 방법은 웹사이트를 포함합니다. 외부 IP 주소와 기타 정보를 보여주는 웹사이트가 많이 있습니다. 브라우저에서 액세스하거나 HTTPS 요청을 할 수 있는 curl 과 같은 명령줄 도구를 사용할 수 있습니다.

다른 방법은 dig 와 같은 전용 명령을 사용하는 것입니다. dig 명령은 DNS 서버에 질문하여 정보를 검색합니다.

브라우저 사용

물론 브라우저를 사용하는 것은 외부 IP 주소를 얻기 위한 스크립트 친화적인 방법이 아닙니다. 그러나 해당 서비스를 제공하는 웹사이트를 보면 유용한 정보를 얻을 수 있습니다. 우리는 ip4.me를 권장했지만 사이트가 HTTPS로 업데이트되지 않았습니다. 여전히 이전의 안전하지 않은 HTTP를 사용합니다. 사이트는 여전히 작동하지만 지금은 더 나은 대안이 있습니다.

ifconfig.me 사이트는 좋은 정보를 제공합니다.

외부 IP 주소를 표시하는 ifconfig.me 웹사이트

이것은 우리의 외부 IP를 178.238.11.140으로 보고합니다. 웹 페이지를 아래로 스크롤하면 사이트에서 정보를 검색하는 데 사용할 수 있는 명령 목록이 표시됩니다.

cURL 명령을 표시하는 ifconfig.me 웹사이트

그들이 제공하는 예는 모두 curl 을 사용하여 사이트를 조사합니다. 그럼 curl 을 사용하는 방법을 살펴보겠습니다.

컬 사용

테스트 머신에서 Fedora 37에는 이미 curl 이 설치되어 있습니다. Ubuntu 및 Manjaro 컴퓨터에 설치해야 했습니다.

Ubuntu에 설치하려면 다음을 입력하십시오.

 sudo apt 설치 컬 

우분투에 컬 설치

Manjaro의 명령은 다음과 같습니다.

 sudo pacman -S 컬 

Manjaro에 컬 설치하기

ifconfig.me 웹 페이지에 나열된 첫 번째 명령으로 이것을 시도할 수 있습니다.

 컬 ifconfig.me 

ifconfig.me 웹사이트의 기본 동작을 사용하여 외부 IP 주소 가져오기

외부 IP 주소가 검색되어 터미널 창에 표시됩니다. 출력은 베어본입니다. 문자열 뒤에 인쇄된 개행 문자조차 없습니다. 명령 프롬프트는 IP 주소와 맞닿아 있습니다.

curl을 사용하여 Linux 명령줄에서 파일을 다운로드하는 방법
관련 Linux 명령줄에서 파일을 다운로드하기 위해 curl을 사용하는 방법

이 명령은 IP 주소를 반환하는 것이 웹사이트의 기본 작업이기 때문에 작동합니다. 기본 작업이 변경되면 다른 결과가 반환될 수 있습니다. 이를 충족하기 위해 URL에 "ip" 식별자를 추가하여 IP 주소를 요청하도록 지정할 수 있습니다.

 컬 ifconfig.me/ip 

ip 지정자가 있는 ifconfig.me 웹사이트를 사용하여 외부 IP 주소 가져오기

이것은 이전과 같이 IP 주소를 반환합니다.

이것은 웹사이트를 IP 주소의 소스로 사용하는 문제를 보여줍니다. 웹사이트는 폐쇄되거나 운영 방식이나 반환된 정보 형식을 변경할 수 있습니다. 이러한 변경으로 인해 이러한 사이트에 의존하는 스크립트가 실패하거나 예측할 수 없는 동작을 하게 됩니다.

DNS 서버와 같이 평판이 좋고 신뢰할 수 있는 리소스를 사용하는 것이 외부 IP를 얻는 보다 강력한 방법입니다. DNS 서버를 쿼리하려면 dig 명령을 사용해야 합니다.

관련: DNS란 무엇이며 다른 DNS 서버를 사용해야 합니까?

dig 명령 사용

이번에는 페도라와 우분투에 dig 를 설치했는데 만자로에만 설치하면 됩니다.

이 명령은 일반적인 pacman 명령이므로 놀라운 일은 아니지만 패키지 이름은 예상한 것과 다릅니다.

 sudo pacman -S 바인드 도구 

Manjaro에 dig ​​설치하기

dig 를 사용하여 외부 IP 주소를 찾으려면 DNS 서버를 가리켜야 합니다. Cisco에서 제공하는 OpenDNS 서버를 사용하고 있습니다.

사용하려는 DNS 서버의 이름을 지정하고 앞에 at 기호 "@"를 지정해야 합니다. 또한 검색하려는 레코드 유형의 이름을 지정해야 합니다. 이 경우 "myip"입니다. +short 옵션은 장황한 응답이 아닌 간결한 응답을 얻도록 합니다.

 dig @resolver1.opendns.com myip.opendns.com +short 

dig 명령을 사용하여 DNS 서버에서 외부 IP 주소 검색

이번에는 IP 주소 뒤에 줄 바꿈 문자가 인쇄됩니다. 우리가 보게 되겠지만, 이것은 IP 주소 문자열 뒤에 인쇄되며 문자열 자체의 필수적인 부분이 아닙니다.

관련: Linux에서 dig 명령을 사용하는 방법

스크립트에서 사용하기

스크립트 내부에서 외부 IP 주소를 알아야 하는 데에는 여러 가지 이유가 있습니다. 외부 IP 주소가 변경되었는지 여부를 모니터링하는 스크립트가 있을 수 있으며 변경 사항이 발생하면 알려줍니다. 또는 서버는 주소가 변경될 때 클라이언트에게 알립니다. 이유가 무엇이든 스크립트 내에서 명령줄에서 사용한 명령을 아주 쉽게 구현할 수 있습니다.

외부 IP 주소를 검색하고 변수에 할당하려면 명령 대체 $(...) 내부에 명령을 래핑하고 다음과 같이 변수에 할당하면 됩니다.

 변수=$(...)

괄호 안의 명령이 실행되고 반환 값이 표현식으로 대체됩니다. 이 예에서 명령은 "변수=반환 값"으로 단순화되었습니다.

관련: Bash에서 변수로 작업하는 방법

여기 스크립트에 있습니다. 데이터 검색 진행 상황을 보고하지 못하도록 curl 명령에 -s (자동) 옵션을 추가했습니다.

 #!/bin/bash

extaddr=$(컬 -s ifconfig.me)

echo "외부 IP 주소는 $extaddr입니다(cURL에서)"

이 스크립트를 편집기에 복사하고 "getex1.sh"로 저장하고 chmod 명령으로 실행 가능하게 만듭니다.

 chmod +x getex1.sh 

chmod로 스크립트를 실행 가능하게 만들기

스크립트를 실행하고 우리가 얻는 것을 봅시다.

 ./getex1.sh 

getex1.sh 스크립트 실행

웹사이트보다 DNS 서버를 사용하는 더 강력한 옵션으로 동일한 작업을 수행하려면 curl 명령을 dig 명령으로 대체하기만 하면 됩니다.

 #!/bin/bash

extaddr=$(dig @resolver1.opendns.com myip.opendns.com +short)

echo "외부 IP 주소는 $extaddr입니다(dig에서)"

이것을 "getex2.sh" 스크립트로 저장하고 chmod 로 실행 가능하게 만드십시오.

 chmod +x getex2.sh 

chmod로 스크립트를 실행 가능하게 만들기

이 스크립트를 실행해 봅시다.

 ./getex2.sh 

getex2.sh 스크립트 실행

두 스크립트의 출력에서 dig 명령이 명령줄에 줄 바꿈 문자를 인쇄했음에도 불구하고 스크립트에서 extaddr 변수에 줄 바꿈이 추가되지 않았음을 알 수 있습니다.

신뢰성을 위해 이동

"비공식" 웹사이트를 사용하는 것보다 평판이 좋고 예측 가능한 출력 형식을 가진 인정된 서비스를 사용하는 것이 항상 더 안전합니다. 인터넷에 있는 다른 모든 것과 마찬가지로 누구로부터 정보를 얻고 있는지 잘 살펴보십시오.'

관련: Linux 스크립트가 가상 머신에서 실행되고 있음을 감지하도록 하는 방법