이름 확인을 사용하고 웹사이트의 IP 주소를 얻으려고 했습니다. 나는 사용했다nslookup명령을 실행하고 출력의 6번째 줄을 사용합니다. 왜냐하면 nslookup 출력의 6행에 IP 주소(IPv4)가 포함되어 있다는 것을 알았기 때문입니다. 내 명령은 다음과 같습니다
website=<somewebsiteURL>
IP=$(nslookup "$website" | head -n 6 | tail -n 1 | cut -d" " -f2)
또한 동일한 목표를 달성하기 위해 sed 명령을 사용해 보았고 다음을 사용했습니다.
website=<somewebsiteURL>
IP=$(nslookup "$website" | sed -n 6p | cut -d" " -f2)
결과는 동일하고 결과는 신뢰할 수 없으며 때로는 작동하고 때로는 작동하지 않습니다.
잘 작동하지만 항상 그런 것은 아닙니다. 때때로 6행 대신 7행을 읽고 실패합니다.
실제로 나는 다른 방법으로 문제를 해결했습니다.
website=<somewebsiteURL>
newIP=$(nslookup "$website" | grep "Address: " | head -n 1 | cut -d" " -f2)
매번 올바른 회선과 IP 주소를 제공합니다(여러 IP를 제공할 수 있지만 >nslookup은 여러 IP를 반환할 수 있습니다.)
처음 두 코드가 실패하는 이유는 무엇입니까?
답변1
grep
유효한 IPv4 주소와 "닮은" 문자열을 구문 분석하는 데 사용됩니다 .
nslookup unix.stackexchange.com | grep -Eo '([0-9]{1,3}[.]){3}[0-9]{1,3}[^#]'
151.101.129.69
151.101.1.69
151.101.193.69
151.101.65.69
다음과 같은 것을 사용하여 dig
외부 구문 분석 도구 없이 원하는 정보를 직접 출력할 수 있습니다 .
dig +short A unix.stackexchange.com
151.101.65.69
151.101.129.69
151.101.193.69
151.101.1.69
답변2
명령적인 기회를 줄 수 있습니다 host
. 여러 IP가 호스트 이름과 연결될 수 있는 경우가 많기 때문에 아마도 첫 번째 IP에 만족할 것입니다.
host -4 cnn.com | sed 1q | awk '{ print $NF }'
151.101.129.67
이게 더 믿음직스러워보이네요
sed 1q
첫 번째 줄을 제외한 모든 항목을 필터링하고,
awk '{ print $NF }'
원하는 IP인 마지막 필드를 인쇄하고,
-4
ipV4 주소를 사용하도록 표시합니다.