인터넷에 연결된 기본 인터페이스의 IP 주소를 표시하는 방법은 무엇입니까?

인터넷에 연결된 기본 인터페이스의 IP 주소를 표시하는 방법은 무엇입니까?

기본 인터페이스로 구성된 내부 IP 주소를 출력하는 스크립트를 생성해야 합니다.

답변1

여기에는 훌륭한 답변이 많이 있지만 일반적인 접근 방식을 추가하고 싶었습니다.

가장 간단한 해결책은 공용 인터넷 주소로의 경로를 얻는 것입니다.

$ ip route get 1.1.1.1 | grep -oP 'src \K\S+'
192.168.0.20

또 다른 해결 방법은 기본 게이트웨이를 가져온 다음 해당 게이트웨이와 통신하는 데 사용되는 IP 주소를 가져오는 것입니다.

$ ip route get $(ip route show 0.0.0.0/0 | grep -oP 'via \K\S+') | grep -oP 'src \K\S+'
192.168.0.20

답변2

다음은 약간 더 간결한 또 다른 접근 방식입니다 procfs(Linux를 사용한다고 가정).

default_iface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route)
ip addr show dev "$default_iface" | awk '$1 ~ /^inet/ { sub("/.*", "", $2); print $2 }'

그러면 인터페이스의 IPv4 및 (사용 가능한 경우) IPv6 주소가 반환됩니다. 테스트 중 하나만 필요한 경우( inetIPv4 및 inet6IPv6 검색) 테스트를 변경할 수 있습니다.


$ default_iface=$(awk '$2 == 00000000 { print $1 }' /proc/net/route)
$ ip addr show dev "$default_iface" | awk '$1 ~ /^inet/ { sub("/.*", "", $2); print $2 }'
10.0.2.15
fe80::a00:27ff:fe45:b085
$ ip addr show dev "$default_iface" | awk '$1 == "inet" { sub("/.*", "", $2); print $2 }'
10.0.2.15
$ ip addr show dev "$default_iface" | awk '$1 == "inet6" { sub("/.*", "", $2); print $2 }'
fe80::a00:27ff:fe45:b085

답변3

제가 가장 좋아하는 것은 아래 것입니다.

기본 인터페이스를 가져옵니다.

$ ip r | grep -oP 'default .* \K.+'
eth0

인터페이스의 IP를 가져옵니다.

$ ip a show eth0 | grep -oP 'inet \K[\d\.]+'
10.33.44.135

포괄적인:

$ ip a show $(ip r | grep -oP 'default .* \K.+') | grep -oP 'inet \K[\d\.]+'
10.33.44.135

답변4

또 다른 방법은 다음과 같습니다.

ip a|awk /$(ip r|awk '/default/ { print $5 }')/|awk '/inet/ { print $2 }'| cut -f1 -d"/"

이것의 장점은 모든 Linux 시스템에서만 기본적으로 사용 가능하다는 ip a것 입니다.ip r

관련 정보