최종 목표

최종 목표

내 연구에 따르면 nslookup실제로는 스크립트 사용을 위한 것이 아니었습니다. 대신 쿼리 매개변수를 기반으로 기계가 읽을 수 있는 출력을 생성하는 옵션 dig과 함께 사용되었습니다 .+short

dig +short myip.opendns.com @resolver1.opendns.com

즉, 내 라우터는 dig를 지원하지 않으며 nslookup반환된 IP 주소를 실제 IP 주소와 비교하기 위한 변수로 저장하려고 합니다.

ip=$(컬 --침묵http://api.ipify.org/)

awk우분투에서 성공적으로:

nslookup yahoo.com  | awk -F': ' 'NR==6 { print $2 } '

그러나 DD-WRT 라우터에서는 오류가 반환됩니다.

nslookup: can't resolve '(null)'
2001:4998:58:1836::10 media-router-fp1.prod1.media.vip.bf1.yahoo.com

최종 목표

CLI가 있습니다.sh 명령DDNS 서비스 업데이트: 측정 및 저장된 DDNS IP 주소가 다를 때마다 업데이트 명령(CRON 작업은 5분마다 확인)을 실행하고 싶습니다.

질문

위의 dig 예제와 동일한 가장 간단한 nslookup은 무엇입니까?

관찰, 피드백 및 테스트 영역

두 번째 매개변수가 추가되었습니다.

root@DD-WRT:/opt# nslookup mydomain.asuscomm.com  resolver1.opendns.com
Server:    208.67.222.222
Address 1: 208.67.222.222 resolver1.opendns.com

Name:      mydomain.asuscomm.com
Address 1: 7W.10X.7Y.6Z c-7W-10X-7Y-6Z.hsd1.fl.comcast.net

devnull: > /dev/null

root@DD-WRT:/opt# nslookup mydomain.asuscomm.com  > /dev/null
nslookup: can't resolve '(null)'

devnull: > /dev/null 2>&1

root@DD-WRT:/opt# nslookup mydomain.asuscomm.com  > /dev/null 2>&1
root@DD-WRT:/opt# 

nslookup을 입력하세요.

root@DD-WRT:~# type nslookup
nslookup is /usr/bin/nslookup

grep으로 파이프한 다음 파일로 파이프합니다.

root@DD-WRT:/opt# nslookup myDomain.asuscomm.com | grep Address > test.txt
nslookup: can't resolve '(null)'
root@DD-WRT:/opt# cat test.txt
Address 1: 7W.10X.7Y.6Z c-7W-10X-7Y-6Z.hsd1.fl.comcast.net

찾다

root@DD-WRT:/opt/test# nslookup myFQDN.asuscomm.com

Name:      mydomain.asuscomm.com
Address 1: 7x.10x.7.x6x c-7x-10x-7x-6x.hsd1.fl.comcast.net

nslookup 야후

root@DD-WRT:/opt# nslookup yahoo.com

nslookup: can't resolve '(null)'

Name:      yahoo.com
Address 1: 2001:4998:c:1023::5 media-router-fp2.prod1.media.vip.gq1.yahoo.com
Address 2: 2001:4998:58:1836::10 media-router-fp1.prod1.media.vip.bf1.yahoo.com
Address 3: 2001:4998:58:1836::11 media-router-fp2.prod1.media.vip.bf1.yahoo.com
Address 4: 2001:4998:c:1023::4 media-router-fp1.prod1.media.vip.gq1.yahoo.com
Address 5: 2001:4998:44:41d::3 media-router-fp1.prod1.media.vip.ne1.yahoo.com
Address 6: 2001:4998:44:41d::4 media-router-fp2.prod1.media.vip.ne1.yahoo.com
Address 7: 72.30.35.9 media-router-fp1.prod1.media.vip.bf1.yahoo.com
Address 8: 98.137.246.7 media-router-fp1.prod1.media.vip.gq1.yahoo.com
Address 9: 98.138.219.231 media-router-fp1.prod1.media.vip.ne1.yahoo.com
Address 10: 98.138.219.232 media-router-fp2.prod1.media.vip.ne1.yahoo.com
Address 11: 72.30.35.10 media-router-fp2.prod1.media.vip.bf1.yahoo.com
Address 12: 98.137.246.8 media-router-fp2.prod1.media.vip.gq1.yahoo.com

그렙:

root@DD-WRT:/# nslookup yahoo.com | grep gq1


nslookup: can't resolve '(null)'
Address 1: 2001:4998:c:1023::4 media-router-fp1.prod1.media.vip.gq1.yahoo.com
Address 6: 2001:4998:c:1023::5 media-router-fp2.prod1.media.vip.gq1.yahoo.com
Address 7: 98.137.246.8 media-router-fp2.prod1.media.vip.gq1.yahoo.com
Address 8: 98.137.246.7 media-router-fp1.prod1.media.vip.gq1.yahoo.com

그렙:

root@DD-WRT:/opt# nslookup yahoo.com | grep -o -E '([0-9][0-9]?[0-9]?\.?){4}$'

nslookup: can't resolve '(null)'

grep3:

root@DD-WRT:/opt# nslookup mydomain.asuscomm.com | grep -o -E '([0-9][^:][0-9]?[0-9]?\.?){4}' > output.txt
nslookup: can't resolve '(null)'
root@DD-WRT:/opt# cat output.txt
7W.10X.7Y.6Z
W-10X-7Y-6Z.

답변1

이것은 작동합니다:

nslookup "$D" 2>/dev/null  | grep "Address " | sed 's/.*: //g;s/ .*//g'

하지만 참고하세요

  • 여러 주소를 반환할 수 있으므로 반복해서 살펴보세요.
  • 필요하지 않으면 ipv6을 grep하십시오.
  • 많은 도메인 이름은 각 쿼리에 대해 서로 다른 콘텐츠를 확인합니다(예: Amazon은 무작위로 cloudfront, fastly 또는 기타 IP를 사용함).

관련 정보