저는 네트워크 보안을 공부하고 있는 신입생입니다. 침투 테스트 단계에서는 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==2
2개의 필드가 있는 행을 선택한다는 의미입니다.print $2
선행 공백도 인쇄됩니다.