기본 인터페이스로 구성된 내부 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 주소가 반환됩니다. 테스트 중 하나만 필요한 경우( inet
IPv4 및 inet6
IPv6 검색) 테스트를 변경할 수 있습니다.
$ 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