Nmap 출력에서 ​​여러 줄을 Grepping

Nmap 출력에서 ​​여러 줄을 Grepping

간단한 질문이라 미리 사과드립니다.

그래서 IP로 모든 메일 서버를 식별하기 위해 클래스 C를 스캔하려고 합니다. 대부분의 IP는 메일 서버가 아닙니다. 나는 그런 것들을 필터링하려고 노력하고 있습니다.

다음을 시도했지만 원하는 것을 반환하지 않았습니다.

nmap -p 25 192.168.15.1-254 | grep report && grep open 

그리고

nmap -p 192.168.15.1-254 (grep report | grep open)

사용해야 하는 다른 유틸리티가 있습니까? 아니면 내 구문에 문제가 있습니까?

답변1

나에게는 명확하지 않습니다. 보고서만 포함하는 문자열이 필요합니까, 아니면 열려 있어야 합니까? 그렇다면 다음을 사용하세요 grep:

nmap | grep -E "report|open"

sed:

nmap | sed '/report\|open/!d'

신고하고 같이 오픈하면

grep:

nmap | grep report | grep open

sed:

nmap | sed '/report.*open\|open.*report/!d'

답변2

grep으로 후처리하는 대신 --openNmap에 옵션을 전달해 보세요. 이렇게 하면 닫혀 있거나 필터링된 포트가 모두 숨겨집니다. -oG또는 -oA옵션을 사용하여 "grepable" 결과를 출력 할 수도 있습니다 . 다음은 당신이 찾고 있는 것을 수행하는 예입니다.

nmap -p 25 --open -oA smtp-servers-%y%m%d 192.168.15.0/24

결과는 , 및 에 smtp-servers-20120607.nmap표시 smtp-servers-20120607.gnmap됩니다 smtp-servers-20120607.xml. 다음과 같이 개방형 SMTP 서버의 IP 주소를 얻을 수 있습니다.

awk '/\<25/open/tcp/ {print $2}' smtp-servers-*.gnmap

하나의 파이프라인에서 이 모든 것이 정말로 필요한 경우 다음과 같이 할 수 있습니다.

nmap -p 25 --open -oG - 192.168.15.0/24 | awk '/\<25/open/tcp/ {print $2}'

답변3

grep두 호출 모두에 파이프가 필요합니다 .

nmap ... | grep report | grep open

또는 태그를 지정했으므로 awk정보를 제공합니다.

nmap ... | awk '/report/ && /open/'

그리고 sed:

nmap ... | sed '/report/!d;/open/!d'

관련 정보