로컬 호스트의 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}'

Shell 대신 Perl, Ruby, Java 등과 같은 고급 언어를 사용하는 경우 각 언어에는 커널에서 이 데이터를 가져오는 고유한 방법이 있습니다. 알아보는 것은 여러분에게 맡기겠습니다.

답변2

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

이 정보를 얻을 수 있는 좋은 방법은 없습니다. 귀하의 구문 분석은 무엇보다도 훌륭합니다. 단지 두 번째 줄의 하드코딩이 잘못되었다는 것뿐입니다. 인터페이스가 특정 순서로 나열된다는 보장은 없습니다. 머신에 여러 인터페이스가 있는 것은 매우 일반적입니다. 여러 네트워크 카드나 가상 인터페이스가 있을 수 있습니다.

일반적으로 관심 있는 IP 주소는 기본 경로와 연결된 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일반적 으로 루트가 아닌 사용자의 기본값 route은 아니지만 PATH정보를 읽고 설정을 변경하지 않는 한 특별한 권한 없이 사용할 수 있습니다.

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

Linux에서는 및 대신 다음 명령을 사용할 수 있습니다 ifconfig.routeipIP 경로 2도구 키트. iproute2의 작성자가 iproute2를 고려하고 ifconfig더 이상 사용하지 않지만 출력을 구문 분석하기가 훨씬 쉽지 않고 항상 사용할 수 있는 반면 일부 간단한 Linux 설치에서는 이를 생략하기 때문에 route실제로 사용하는 데 이점이 없습니다 .ipipifconfigrouteip

답변3

여기에 있는 모든 답변은 기술적으로 정확하지만 "올바른" 답변으로 간주되는 것은 아닙니다. 불행하게도 귀하의 질문은 매우 모호합니다. (Linux에서 네트워킹이 어떻게 작동하는지 잘 모르신다면 이해할 수 있습니다.) 문제에 대한 가능한 설명에 대한 몇 가지 답변을 드리겠습니다.


머신의 기본 IP

머신에는 다른 모든 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. 따라서 명령은 일치하는 항목을 얻을 수 있습니다 . 해당 행에서 IP를 가져오면 됩니다 ./etc/hosts/etc/resolv.conf
getent hosts "$(hostname)"/etc/hostsawk

( 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 

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

IP만 원하는 경우 grep끝에 추가 IP를 추가할 수 있습니다.

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가 없으며 모든 것은 고려 중인 인터페이스와 운영 체제에서 사용되는 인터페이스 수에 따라 다릅니다.

커널이 네트워크 활동을 처리하는 방법을 이해하는 데 좋은 방법인 "커널 라우팅 테이블" 주제에 관심이 있을 수 있습니다.

관련 정보