네트워크 로그 파일에서 일치하는 열린 포트 수 계산

네트워크 로그 파일에서 일치하는 열린 포트 수 계산

다음과 같은 웹 로그 파일이 있습니다.

Nmap scan report for 192.168.1.51
Host is up.
PORT     STATE    SERVICE
80/tcp   open     http
443/tcp  open     https
8080/tcp open     http-proxy
443/tcp  open     https
8080/tcp open     http-proxy
8082/tcp filtered redcap
8083/tcp filtered https-alt

Nmap scan report for 192.168.1.201
Host is up.
PORT     STATE    SERVICE
80/tcp   open   http
443/tcp  filtered https
8281/tcp filtered http-proxy
8080/tcp open     sedan
8801/tcp filtered https-alt

Nmap scan report for 192.168.1.17
Host is up.
PORT     STATE    SERVICE
80/tcp   closed   http
443/tcp  closed https
9081/tcp open      ecan

Nmap scan report for 192.168.1.10
Host is up.
PORT     STATE    SERVICE
80/tcp   closed   ftp
443/tcp  open   https
9081/tcp open      standard

IP 주소와 각 IP 주소에 대해 열린 포트 수를 추출하고 싶으므로 결과는 다음과 같습니다.

192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1

답변1

awk해결책:

awk 'BEGIN{RS=""; FS="\n"} 
    {split($1,a," "); host[a[5]] = 0; for (i=1; i<=NF; i++) if (match($i,"open") != 0) 
        host[a[5]]++} END{for (each in host) print each " - " host[each]}' file

192.168.1.10 - 2
192.168.1.201 - 2
192.168.1.51 - 5
192.168.1.17 - 1

이 명령에서 레코드 구분 기호는 RS빈 줄로 설정되고 “”필드 구분 기호는 개행 문자로 설정됩니다 \n. 다음으로, awk각 레코드의 첫 번째 행을 분할하고 IP 주소와 관련된 분할 배열의 다섯 번째 항목을 캡처합니다. 그런 다음 Awk나머지 필드를 반복하여 NF각 필드에서 "open" 문자열을 찾습니다. 존재 하는 경우 open호스트 배열의 연결된 IP 주소에 대해 계산됩니다. 마지막으로 awk결과를 인쇄합니다.

답변2

nmap 로그 파일이 있는 것으로 보이므로 nmap 호출을 제어할 수 있는 경우 (더 이상 사용되지 않음) -oG옵션을 사용하여 grepable 출력을 생성하는 것을 고려하십시오. 예를 들어:

$ nmap -oG /tmp/output.txt localhost
$ awk '/^Host: / && /Ports: / { num=gsub("/open/", ""); print $2, "-", num }' < /tmp/output.txt
127.0.0.1 - 6

이는 awk를 사용하여 nmap의 grepable 출력을 구문 분석합니다. awk 스크립트는 "Ports:" 문자열도 포함하는 "Host:" 행을 찾은 다음 "/open/" 문자열 수를 계산하고 각 호스트에 대한 수를 보고합니다.

답변3

대신 다음 접근 방식을 사용합니다 awk.

awk 'function output() { print ip, count; count=0 }
     /Nmap/ && count { output() }
     /Nmap/ { ip=$NF }
     /open/ { count++ }
END{ output() }' infile

관련 정보