제한된 초록 나열

제한된 초록 나열

한 줄 명령으로 문제가 있는 IP 목록을 나열하려고 하는데 마지막 부분을 수행하는 방법을 잘 모르겠습니다. 누군가가 올바른 방향을 알려줄 수도 있습니다.

cat /var/log/syslog* | grep "SRC=" | cut -d " " -f 14 | sort | uniq -c | sort -n -r

영어로... 이것은 모든 syslog 파일(또한 회전된 syslog 파일)을 인쇄하고, 방화벽 항목을 검색하고 SRC 값(IP)을 가져와서 계산하고 가장 높은 것부터 낮은 것까지 나열해야 합니다. 지금 내가 원하는 것은 처음 5개로 제한하는 것입니다. 이 작업을 수행할 수 있는 명령을 아는 사람이 있습니까?

시스템 로그의 항목 예:

1월 11일 12:01:52 xxxx 커널: [47261.722647] 잘못된 입력 패킷: IN=eth0 OUT= MAC=44:8a:5b:a0:24:eb:00:31:46:0d:21:e8:08 : 00 SRC=xx.xx.xx.xx DST=xx.xx.xx.xx LEN=40 TOS=0x00 PREC=0x00 TTL=239 ID=33840 PROTO=TCP SPT=1024 DPT=22151 WINDOW=1024 RES=0x00 SYNURGP =0

이 항목은 내 사용자 정의 방화벽에 의해 생성되었으며 이 질문의 일부가 아닙니다.

명령 출력 예:

 47 SRC=13.82.59.79
  2 SRC=77.72.82.145
  2 SRC=213.157.51.11
  2 SRC=159.203.72.216
  1 SRC=77.72.85.15
  1 SRC=77.72.85.10
  1 SRC=77.72.83.238
  1 SRC=77.221.1.237
  1 SRC=222.186.172.43
  1 SRC=216.170.126.109
  1 SRC=191.101.167.253
  1 SRC=190.198.183.234
  1 SRC=173.254.247.206
  1 SRC=164.52.13.58
  1 SRC=141.212.122.145
  1 SRC=125.78.165.42
  1 SRC=118.139.177.119
  1 SRC=111.75.222.141
  1 SRC=103.30.40.9

답변1

awk '/SRC=/ { print $13 }' /var/log/syslog* | sort | uniq -c | sort -n -r | head -n 5

이렇게 하면 원래 파이프라인에서 catcat, grelpping 및 cut이 제거되고 최종적으로 상위 5개 결과가 제공되는 awk.head -n 5

답변2

단일 GNU 사용awk"마법":

awk 'BEGIN{ 
         PROCINFO["sorted_in"]="@val_num_desc" 
     }
     /SRC=/{ src[$13]++ }
     END{ 
         for (k in src) { 
             print src[k], k; 
             if (++c > 4) break 
         } 
     }' /var/log/syslog*

답변3

다음만 사용하세요 ( , 또는 perl필요 없음 ) .grepcutsortuniq

perl -lane '
  $IPs{$F[12]}++ if (m/SRC=/);  # perl arrays start from zero, not 1.

  END {
    foreach $ip (sort { $IPs{$b} <=> $IPs{$a} } keys %IPs) { 
      last if ($count++ > 4);

      $seen=$IPs{$ip};   # $seen is only really needed in case you uncomment 
                         # the next line, to use the key before we change it.

      #$ip =~ s/^SRC=//; # uncomment if you want IPs without the SRC=

      printf "%s\t%s\n", $seen, $ip;
    };
  }' < <(zcat /var/log/syslog*)

해시 배열( %IPs)을 구축하고 특정 IP 주소를 볼 때마다 개수를 셉니다. 모든 입력을 읽은 후 해시를 개수별로 정렬하고 상위 5개를 인쇄합니다.

그런데 이는 시스템 로그와 기타 로그 파일이 정기적으로 순환되고 압축되는 것이 일반적이기 때문 zcat만은 아닙니다 ./var/log/syslog*

관련 정보