반환된 IP 주소nslookup

반환된 IP 주소nslookup

저는 네트워크 보안을 공부하고 있는 신입생입니다. 침투 테스트 단계에서는 kali linux를 사용합니다. 나는 또한 bash 스크립팅을 처음 접했습니다.

주문하다:

nslookup -type=mx cathay.com.sg

출력 예

Server:     192.168.48.2
Address:    192.168.48.2#53

Non-authoritative answer:
cathay.com.sg   mail exchanger = 0 cathay-com-sg.mail.protection.outlook.com.

Authoritative answers can be found from:

나는 그것이 단지 보여주기를 원합니다 :

192.168.48.2
192.168.48.2#53

그러나 내 현재 스크립트는

#!/bin/bash
#nslookup but display only IP
nslookup -type=mx cathay.com.sg
|awk -F":" '{print $2}'

이로 인해 다음 오류가 발생합니다.

./nslookupscr.sh: line 4: syntax error near unexpected token `|'
./nslookupscr.sh: line 4: `|awk -F":" '{print $2}''

대신 dig를 사용한다는 이야기를 들었지만 아직 이에 대해 논의한 적은 없습니다. 우리는 형식화를 위해 awk와 grep만 살펴봤기 때문에 무엇이 문제인지 잘 모르겠습니다.

답변1

반환된 IP 주소nslookup

귀하의 요청을 읽어보니 표시하려는 것 같습니다.MX도메인의 IP 주소입니다.

그러나 nslookup첫 번째 줄에는 이름과 IP 주소만 보고됩니다.당신의구성된 DNS:

nslookup -type=mx cathay.com.sg | cat -n
     1      Server:         192.168.1.1
     2      Address:        192.168.1.1#53
     3
     4      Non-authoritative answer:
     5      cathay.com.sg   mail exchanger = 0 cathay-com-sg.mail.protection.outlook.com.
     6
     7      Authoritative answers can be found from:
     8      cathay.com.sg   nameserver = ns2.dreamhost.com.
     9      cathay.com.sg   nameserver = ns3.dreamhost.com.
    10      cathay.com.sg   nameserver = ns1.dreamhost.com.
    11      ns1.dreamhost.com       internet address = 64.90.62.230
    12      ns2.dreamhost.com       internet address = 208.97.182.10
    13      ns3.dreamhost.com       internet address = 66.33.205.230

실제 답변은 4번째 줄부터 시작하며 MX(우선순위 = 0)에게 name: 이 있음을 알려주는 한 줄만 포함합니다 cathay-com-sg.mail.protection.outlook.com.

거기에서 (적어도) 두 번째 질문을 해야 합니다.

nslookup cathay-com-sg.mail.protection.outlook.com |cat -n
     1      Server:         192.168.1.1
     2      Address:        192.168.1.1#53
     3
     4      Non-authoritative answer:
     5      Name:   cathay-com-sg.mail.protection.outlook.com
     6      Address: 104.47.124.36
     7      Name:   cathay-com-sg.mail.protection.outlook.com
     8      Address: 104.47.126.36

다시 말하지만, 대답은 4행 뒤에서 시작하며 두 개의 Address:.

USG dig, 아래로, 간단히 다음을 수행할 수 있습니다.

mapfile -t mxnames < <(dig +noall +answer mx cathay.com.sg)
mxnames=("${mxnames[@]##*[ $'\t']}")
mapfile -t mxips < <(dig +noall +answer ${mxnames[@]})
mxips=("${mxips[@]##*[ $'\t']}")

그 다음에

declare -p mxips mxnames

다음과 같은 내용이 반환될 수 있습니다.

declare -a mxips=([0]="67.205.10.249" [1]="77.32.207.225" [2]="104.47.125.36" [3]="104.47.126.36")
declare -a mxnames=([0]="cathay.com.sg." [1]="cathay-com-sg.mail.protection.outlook.com.")

당신이 사용할 수있는

for ip in ${mxips[@]};do
    ping -{c,W}1 $ip &>/dev/null && echo $ip ok || echo $ip -- &
        sleep .02
  done |
    cat
77.32.207.225 ok
67.205.10.249 ok
104.47.125.36 --
104.47.126.36 --

몇 가지 설명:

  • 구문은 dig +noall +answer <QUERY>한 줄의 답만 반환합니다. 예를 들면 다음과 같습니다.

     dig +noall +answer mx cathay.com.sg
     cathay.com.sg.    12345   IN   MX   0 cathay-com-sg.mail.protection.outlook.com.
    
     dig +noall +answer $mxname
     cathay-com-sg.mail.protection.outlook.com. 10 IN A 104.47.125.36
     cathay-com-sg.mail.protection.outlook.com. 10 IN A 104.47.126.36
    

man dig자세한 내용은 확인해 보세요 .

  • 문법 ${var##* }이라고 합니다매개변수 확장, 왼쪽부터 마지막까지 문자열을 제거합니다.공간.

     mxname=${mxname##* }
    

    dig답변의 왼쪽 부분을 제거 하고 cathay-com-sg.mail.protection.outlook.com.에 저장합니다 $mxname.

     mxips+=(${line##* })
    

    이전 답변의 마지막 부분을 추가합니다.$mxips 대량으로.

꼭 보시고 man bash검색해 보세요매개변수 확장:
man -P'less +"/^ *Parameter Expansion"' bash.

또는 를 사용 nslookup하되 2개의 쿼리를 한 번만 실행하세요.

nslookup계속해서 달릴 수 있기 때문에인터렉티브패턴을 사용하여 여러 쿼리에 응답할 수 있도록 1을 사용하는 기능이 있습니다.십자가nslookup도메인의 모든 IP 주소를 나열하는 데 필요한 만큼 많은 쿼리를 요청하세요 .

mxIps ()  { 
    local target=$1 line foo;
    local -a mxnames=() mxips=();
    mkfifo fifo-nsl;                 # Fifo for binding nslookup output
    exec 7> >(stdbuf -i0 -o0 nslookup >fifo-nsl);
    exec 6< fifo-nsl;
    rm fifo-nsl;                     # As FD 6 and 7 are open, we could remove them
    printf "set type=mx\n%s\n" $target 1>&7;  # 1st query
    read -u 6 line;                           # wait for answer and drop 1st line
    while read -t .002 -u 6 line; do
        [ "$line" ] && [ -z "${line%%$target*mail exchanger*}" ] &&
            mxnames+=(${line##* });           # Add to mxnames array
    done;
    printf 'set type=A\n' 1>&7;               # Set -type=A
    for mxname in ${mxnames[@]%.};
    do
        echo $mxname 1>&7;                    # Next query
        read -u 6 line;                       # Wait for answer and
        read -u 6 line;                       # drops two first lines
        while read -t .002 -u 6 line; do
            [ "$line" ] && [ -z "${line%%Address:*}" ] &&
                mxips+=(${line##* });         # Add to mxips array
        done;
    done;
    echo exit 1>&7;                           # End nslookup sub process
    exec 6>&-;                                # Close FD 6, then 7
    exec 7>&-;
    declare -p mxips                          # Dump result
}

그 다음에

mxIps cathay.com.sg
declare -a mxips=([0]="104.47.125.36" [1]="104.47.126.36")

답변2

나는 사용할 것이다

#!/bin/bash
#nslookup but display only IP
nslookup -type=mx cathay.com.sg |
awk -F":" 'NF==2 {print $2}'

알아채다

  • 파이프는 |줄의 끝에 있으며 연속 문자 역할을 합니다.
  • NF==22개의 필드가 있는 행을 선택한다는 의미입니다.
  • print $2선행 공백도 인쇄됩니다.

관련 정보