로컬호스트의 IP

로컬호스트의 IP

Linux 인스턴스는 IP 주소를 어떻게 결정합니까?

즉, 127.0.0.1이 아닙니다.

이것이 파일에 저장되어 있습니까? 아니면 ifconfig가 호출할 때마다 어떻게든 계산합니까?

나는 단지 노력했다는 것을 보여주기 위해 이 문제를 해결했지만, 진지하게 적용할 만한 것은 아닙니다.

sudo ifconfig | head -n 2 | tail -n 1 | tr -s " " | tr " " ":" | cut -d":" -f 4

답변1

귀하의 질문에는 근본적인 결함이 있습니다. 첫째, 호스트는 하나 이상의 주소(예: 다중 인터페이스)를 가질 수 있으며 인터페이스당 하나 이상의 주소를 가질 수도 있습니다. 이는 전 세계적으로 연결된 모든 호스트가 최소한구애.

둘째, 쉘에서 이 작업을 수행하는 "가장 좋은" 방법은 시스템마다 다릅니다.

리눅스:

/sbin/ip addr show eth0 | awk -F"[ /]+" '/inet / {print $3}'

>= 솔라리스 11:

ipadm show-addr net0/v4 | awk -F"[ /]+" '/ok/ {print $5}'

맥 OS X/다윈:

ipconfig getifaddr en0

가장 낮은 공통 분모로 이동하여 사용하는 경우에도 ifconfig출력 형식이 변경될 수 있으므로 일관성이 없습니다. 그러나 예제를 정리하려면 다음을 사용하십시오.

ifconfig eth0 | awk -F"[ :]+" '/inet / {print $4}'

쉘 대신 Perl, Ruby, Java 등과 같은 고급 언어를 사용하는 경우 각 언어에는 커널에서 이 데이터를 얻는 고유한 방법이 있습니다. 이 문제는 당신에게 맡기겠습니다.

답변2

정보는 언제든지 변경될 수 있으므로 커널에서 검색해야 하며 파일에 저장할 수 없습니다.

이 정보를 얻을 수 있는 좋은 방법은 없습니다. 두 번째 줄의 하드 코딩이 잘못되었다는 점을 제외하면 구문 분석은 어느 것이나 좋습니다. 인터페이스가 특정 순서로 나열된다는 보장은 없습니다. 머신에 둘 이상의 인터페이스가 있는 것은 매우 일반적입니다. 여러 개의 네트워크 카드 또는 가상 인터페이스가 있을 수 있습니다.

관심 있는 IP 주소는 기본 경로와 연결된 주소인 경우가 많습니다. 대부분의 구성에서는 명령을 사용하여 올바른 인터페이스를 얻은 route다음 를 사용하여 해당 인터페이스의 IP 주소를 추출할 수 있습니다 ifconfig.

/sbin/ifconfig $(/sbin/route -n |
                 awk '$1 == "0.0.0.0" {print $8}') |
awk 'match($0, /inet addr:[.0-9]+/) {print substr($0, RSTART+10, RLENGTH-10)}'

에 전화할 필요가 없다는 점에 유의하세요 sudo. 루트가 아닌 사용자의 경우 기본값이 아닌 경우가 많지만 ifconfig정보 를 읽기만 하고 설정을 변경하지 않는 한 특별한 권한 없이 사용할 수 있습니다.routePATH

Linux 이외의 Unix 변형에서는 위의 명령을 조정해야 할 수도 있습니다. 대부분에는 ifconfig및 라는 명령이 있지만 route출력 형식은 다를 수 있습니다.

ifconfigLinux에서는 및 대신 다음 명령을 route사용할 수 있습니다.ipiproute2도구 제품군. iproute2의 작성자는 더 이상 사용되지 않는 것을 고려 ifconfig하고 사용하는 반면, 의 출력은 구문 분석하기가 현저히 쉽지 않고 항상 사용할 수 있는 반면 일부 간단한 Linux 설치에서는 생략되기 때문에 route실제로 를 사용하는 데 거의 이점이 없습니다 .ipipifconfigrouteip

답변3

여기에 있는 모든 대답은 기술적으로 정확하지만 "올바른" 대답은 아닙니다. 불행히도 귀하의 질문은 매우 모호하므로(Linux의 네트워킹 작동 방식에 대해 잘 알지 못하는 경우 이해할 수 있습니다) 질문에 대한 가능한 해석에 대한 몇 가지 답변을 제공하겠습니다.


머신의 기본 IP

머신에는 머신 기본 IP로 간주되는 다른 IP보다 하나의 IP가 있습니다. 상자에는 여러 개의 IP가 있을 수 있고 어떤 IP가 사용되는지는 다양하기 때문에 이는 의미가 없습니다(이에 대해서는 잠시 후에 설명하겠습니다).

기본 IP는 단순히 시스템의 호스트 이름과 연결된 IP입니다. 다음을 실행하여 이 IP를 찾을 수 있습니다.

getent hosts "$(hostname)" | awk '{ print $1 }'

이제 이것이 수행하는 작업은 에 따라 시스템의 호스트 이름에 대한 IP를 찾는 것입니다 /etc/nsswitch.conf. 대부분의 경우 /etc/nsswitch.conf파일에는 hosts: files dns. 즉, 어떤 종류의 호스트 이름이나 주소 조회를 시도할 때 /etc/hosts먼저 찾은 다음 DNS(에서 구성한 대로 /etc/resolv.conf)를 참조합니다.
따라서 명령은 getent hosts "$(hostname)"에서 일치하는 항목을 가져올 가능성이 높습니다 /etc/hosts. 단순히 awk해당 라인에서 IP만 가져옵니다.

( getent에 나열된 '데이터베이스'를 쿼리하기 위한 간단한 유틸리티입니다 /etc/nsswitch.conf.)


외부 세계와 통신하는 데 사용되는 IP

앞서 언급했듯이 머신의 기본 IP는 상당히 의미가 없습니다. 기기는 통신을 위해 여러 IP 중 하나를 사용할 수 있습니다. 귀하의 경우에는 하나의 인터페이스와 하나의 (로컬 호스트가 아닌) IP만 있을 가능성이 높습니다. 그러나 서버에는 여러 인터페이스 또는 IP가 있을 수 있습니다(때로는 단일 인터페이스에 여러 IP가 있음).
어떤 IP가 사용되는지는 커널의 라우팅 테이블에 의해 결정됩니다. 라우팅 테이블의 작동 방식은 간단하지 않기 때문에 자세히 설명하지 않겠습니다(라우팅 테이블은 여러 개 있고 어떤 테이블을 사용하는지는 테이블 선택 규칙에 따라 다름). 어떤 IP가 사용될지 찾는 방법을 알려드리겠습니다.

특정 대상과 통신하는 데 어떤 IP가 사용되는지 확인하려면 다음 명령을 사용하십시오.

ip route get 1.2.3.4

( 1.2.3.4목적지의 IP로)

내 컴퓨터에서 google.com의 IP( ) 중 하나를 사용하여 이 작업을 수행하면 74.125.139.102다음과 같은 결과가 나타납니다.

74.125.139.102 via 192.168.0.1 dev wlan0  src 192.168.0.24 
    cache 

이것이 나에게 알려주는 것은 내 컴퓨터가 와 대화할 때마다 IP 192.168.0.24가 사용된다는 것입니다 74.125.139.102.

IP만 원하는 경우 grep끝에 추가 정보를 추가하면 됩니다.

ip route get 1.2.3.4 | grep -oP '(?<=src )\S+'

grepawk오류가 발생할 가능성이 적기 때문에 an 대신에 사용됩니다 . IP가 같은 위치에 있지 않은 줄이 변경될 수 있지만 항상 "src"를 따르므로 "src" 바로 뒤의 값을 가져옵니다.


기본 게이트웨이 IP

마지막으로 기본 게이트웨이가 있습니다. 어떤 IP가 사용될지 확인하기 위해 쿼리할 특정 대상이 없는 경우 기본 게이트웨이에서 하나를 선택할 수 있습니다. 인터페이스가 하나만 있는 경우에는 이것이 전부입니다.
이는 기본적으로 위와 동일하며 기본 게이트웨이를 대상으로 사용하여 조회합니다.

ip route get "$(ip route show to 0/0 | grep -oP '(?<=via )\S+')"

그러면 위 섹션과 같은 줄이 표시됩니다. 값 src은 기본 게이트웨이를 통해 흐르는 트래픽에 사용되는 IP입니다.

이전 섹션에서와 마찬가지로 IP만 얻으려면 grep.

ip route get "$(ip route show to 0/0 | grep -oP '(?<=via )\S+')" | grep -oP '(?<=src )\S+'

답변4

귀하의 요청은 모호합니다. 일반적으로 "localhost"라는 단어는 루프백 인터페이스를 의미하며 127.0.0.1이 가장 일반적이고 올바른 대답입니다.

당신이 놓치고 있는 것은 다음과 같습니다:

  • 모든 인터페이스가 서로 다른 IP를 가질 수 있다는 사실, 루프백 인터페이스는 이더넷 카드나 무선 USB 수신기와 같은 네트워크 인터페이스입니다.
  • 결과적으로 단일 PC에는 단일 IP가 없으며 모든 것은 고려 중인 인터페이스와 OS에서 사용하는 인터페이스 수에 따라 다릅니다.

커널이 네트워킹 활동을 처리하는 방법을 이해하는 데 도움이 되는 "커널 라우팅 테이블"이라는 주제에 관심이 있을 것입니다.

관련 정보