nslookup 스크립트가 다른 결과를 제공하는 이유는 무엇입니까?

nslookup 스크립트가 다른 결과를 제공하는 이유는 무엇입니까?

이름 확인을 사용하고 웹사이트의 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인 마지막 필드를 인쇄하고, -4ipV4 주소를 사용하도록 표시합니다.

관련 정보