nmap에서 Dig 명령 전달

nmap에서 Dig 명령 전달

명령의 결과를 가져와 명령 dig에 전달 해야 하는 문제가 있습니다. 예를 들면 다음과 같습니다.nmap

for ip in 'dig mydomain.com -t ns +short'
do nmap $ip
done

답변1

명령 은 dig여러 줄의 출력을 반환합니다. 각 줄은 호스트 이름입니다. nmap모든 호스트 이름에서 실행하고 싶습니다 .

xargs유틸리티는 입력으로 제공된 인수를 사용하여 명령을 실행하는 데 사용됩니다 xargs.

dig mydomain.com -t ns +short | xargs -I {} nmap {}

nmap이것은 각 출력 라인에 대해 한 번씩 실행됩니다 dig.

또는 nmap한 번에 두 개씩 병렬로 실행하고 xargs구현에서 이를 지원하는 경우(이것이 이해가 되는지 모르겠지만 가능합니다)

dig mydomain.com -t ns +short | xargs -I {} -P 2 nmap {}

dig또 다른 접근 방식은 명시적 루프의 출력 행을 while쉘 변수로 읽은 다음 nmap해당 변수의 값을 호출하는 것입니다.

dig mydomain.com -t ns +short |
while IFS= read -r host; do
    nmap "$host"
done

한 가지 변형은 배열의 호스트 이름을 수집하고(배열을 이해하는 셸이 필요함) nmap모든 배열 요소를 한 번에 호출하는 것입니다.

dig mydomain.com -t ns +short |
{ readarray -t hosts; nmap "${hosts[@]}"; }

또는 위치 인수를 사용하고 동일한 작업을 수행합니다.

dig mydomain.com -t ns +short |
{
    set --
    while IFS= read -r host; do
        set -- "$@" "$host"
    done
    nmap "$@"
}

또는 -iL옵션 을 사용 nmap하고 이 방법으로 호스트 이름을 제공하십시오.

nmap -iL <( dig mydomain.com -t ns +short )

또는 프로세스 대체가 없는 경우,

dig mydomain.com -t ns +short | nmap -iL -

코드의 주요 문제점은 루프가 dig mydomain.com -t ns +short단일 반복의 값으로 리터럴 문자열을 사용한다는 것입니다 $ip.

또한 $ip루프 본문 호출에서 따옴표를 사용하고 있습니다 nmap. 이는 셸이 유틸리티를 호출하기 전에 값을 단어로 분할한다는 의미입니다. 유틸리티 는 , , 및 단어 를 인수로 nmap가져옵니다 . 그런 다음 잘 이해하지 못하는 옵션에 대해 불평을 계속합니다 .digmydomain.com-tns+short-t

이제 당신은할 수 있다작은 따옴표를 백틱으로 변경하여 이 문제를 "수정"하면 작은 따옴표로 묶인 문자열을 명령 대체로 변환하지만 명령 출력을 반복하는 일반적인 방법으로서 이것은 다소 우아하지 않습니다. 특히 단어 출력을 공백으로 분할하고 쉘이 읽어야 하기 때문에 각 단어에 파일 이름 와일드카드를 적용합니다.모든 출력루프의 첫 번째 반복을 시작하기 전에 명령을 실행하십시오.

위 코드의 모든 변형은 일부 명령의 출력을 읽고 이를 한 줄씩 nmap.

관련 정보