nmap은 특정 포트가 열려 있는 호스트만 표시할 수 있나요?

nmap은 특정 포트가 열려 있는 호스트만 표시할 수 있나요?

nmapSSH와 HTTP가 모두 활성화된 로컬 네트워크의 모든 호스트를 나열 할 수 있습니까 ? 이를 위해 다음 명령을 실행할 수 있습니다.

nmap 192.168.1.1-254 -p22,80 --open

그러나 여기에는 나열된 포트 중 하나를 여는 호스트가 나열되는 반면 호스트가 모든 포트를 열도록 하고 싶습니다. 또한 출력은 매우 장황합니다.

# nmap 192.168.1.1-254 -p22,80 --open

Starting Nmap 6.47 ( http://nmap.org ) at 2015-12-31 10:14 EST
Nmap scan report for Wireless_Broadband_Router.home (192.168.1.1)
Host is up (0.0016s latency).
Not shown: 1 closed port
PORT   STATE SERVICE
80/tcp open  http

Nmap scan report for new-host-2.home (192.168.1.16)
Host is up (0.013s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

Nmap done: 254 IP addresses (7 hosts up) scanned in 3.78 seconds

내가 찾고있는 결과는 다음과 같습니다.

192.168.1.16

위의 호스트는 모든 포트가 열려 있는 유일한 호스트이기 때문입니다.

확실히 출력을 후처리할 수 있지만 nmap의 출력 형식에 의존하고 싶지 않으며 방법이 있다면 nmap이 수행하도록 하고 싶습니다.

답변1

Nmap에서는 이 작업을 수행할 수 있는 방법이 없지만 "nmap의 출력 형식에 의존"하고 싶지 않다는 귀하의 의견을 통해 Nmap에는 기계 판독 가능한 구문 분석을 위한 두 가지 안정적인 출력 형식이 있다는 점을 지적하게 되었습니다. 나이가 많은 사람은쿼리 출력( -oG), 이는 Perl, awk 및 grep을 사용한 처리에 적합하지만 일부 고급 출력(예: NSE 스크립트 출력, 포트 이유, 경로 추적 등)이 부족합니다. 보다 완전한 형식은 다음과 같습니다.XML 출력( -oX), 그러나 이는 귀하의 목적에 비해 과잉일 수 있습니다.

-oG, 또는 ( -oX두 형식과 "일반" 텍스트 출력 모두) 을 사용하여 이러한 출력을 파일에 저장하거나 -oA다음 중 하나를 stdout으로 직접 보낼 수 있습니다.nmap 192.168.1.1-254 -p22,80 --open -oG - | awk '/22\/open.*80\/open/{print $2}'

답변2

다음 명령을 시도해 보십시오:

nmap --open -p 22,80 192.168.1.1-254 -oG - | grep "/open" | awk '{ print $2 }'

그러면 범위에서 포트를 검색하고 출력을 grepable 형식으로 파이프하여 열린 포트를 찾은 다음 해당 기준과 일치하는 IP 주소를 인쇄합니다.

답변3

또한 다음 awk줄을 고려하십시오.

nmap -Pn -oG -p22,80,443,445 - 100.100.100.100 | awk '/open/{ s = ""; for (i = 5; i <= NF-4; i++) s = s substr($i,1,length($i)-4) "\n"; print $2 " " $3 "\n" s}'

다음과 같이 지정된 모든 열린 포트가 있는 모든 호스트를 인쇄합니다.

 100.100.100.100 (some-domain.com)
 22/open/tcp//ssh
 80/open/tcp//http
 443/open/tcp//microsoft-ds
 445/open/tcp//https-alt

답변4

이러한 모든 답변에는 열려 있는 포트가 있어도 여전히 무시된 포트가 표시됩니다. 나에게 도움이 된 것은 다음과 같습니다.

sudo nmap -sS "10.10.10.0/24" --open -oG ./nmap_scan; sudo chown youruser: ./nmap_scan; cat ./nmap_syn | grep -v 'Nmap\|Status:' | sed 's/\t/,/g' |  awk '{gsub("Ignored State: .*", "");print}' | column -t -s',' 
  • sudo nmap -sS "192.168.1.0/24" --open -oG ./nmap_scan: 열린 포트에서만 Syn 스캔을 수행하고 nmap_scan이라는 이름의 grepable 파일로 출력합니다.
  • sudo chown youruser: ./nmap_scan: sudo를 실행한 이후 파일 소유권을 사용자에게 다시 변경합니다. 이는 선택 사항입니다. 다음 명령을 모두 루트 또는 sudo로 실행해야 합니다.
  • grep -v '^Nmap\|^Status:'Status:: 또는 로 시작하는 모든 줄을 제거합니다 Nmap. 이는 가비지 줄이며 출력에 필요하지 않습니다.
  • sed 's/\t/,/g': 모든 탭을 쉼표로 변경합니다. 이는 기본적으로 출력을 구문 분석하기 쉬운 csv 형식으로 변환합니다.
  • awk '{gsub("Ignored State: .*", "");print}': "무시된 상태:" 뒤의 모든 항목에 대한 정규식인 "무시된 상태: .*"를 제거합니다. 각 ,섹션 사이.
  • column -t -s',':선택 사항: 읽을 수 있도록 출력을 열 형식으로 표시합니다.

관련 정보