웹사이트 검색

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


요약: 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 주소로 교환합니다.

광대역 모뎀에는 인터넷 서비스 제공업체(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를 178.238.11.140으로 보고합니다. 웹 페이지를 아래로 스크롤하면 사이트에서 정보를 검색하는 데 사용할 수 있는 명령 목록을 찾을 수 있습니다.

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

컬 사용

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

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

sudo apt install curl

Manjaro에 대한 명령은 다음과 같습니다.

sudo pacman -S curl

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

curl ifconfig.me

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

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

curl ifconfig.me/ip

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

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

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

dig 명령 사용

이번에는 dig가 Fedora와 Ubuntu에 설치되었고 Manjaro에만 설치하면 되었습니다.

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

sudo pacman -S bind-tools

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

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

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

이번에는 IP 주소 뒤에 개행 문자가 인쇄됩니다. 보시다시피 이것은 IP 주소 문자열 뒤에 인쇄되며 문자열 자체의 필수적인 부분이 아닙니다.

스크립트에서 사용

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

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

variable=$(...)

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

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

#!/bin/bash

extaddr=$(curl -s ifconfig.me)

echo "The external IP address is $extaddr (from cURL)"

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

chmod +x getex1.sh

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

./getex1.sh

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

#!/bin/bash

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

echo "The external IP address is $extaddr (from dig)"

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

chmod +x getex2.sh

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

./getex2.sh

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

신뢰성을 위해 가십시오

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