내 연구에 따르면 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를 사용함).