2012-04-24 2 views
15

내가보기에 수백만 개의 패킷이 있고 특정 포트 번호로 패킷이 전송 된 횟수를보고 싶습니다. 여기 grep과 일치하는 고유 항목 수를 어떻게 인쇄합니까?

는 패킷의 일부입니다 :

10:27:46.227407 IP 85.130.236.26.54156 > 139.91.133.120.60679: tcp 0 
10:27:46.337038 IP 211.142.173.14.80 > 139.91.138.125.56163: tcp 0 
10:27:46.511241 IP 211.49.224.217.3389 > 139.91.131.47.6973: tcp 0 

내가 지금 여기에 2 포트 번호를 통해보고 싶은 :

60679, 53163, 6973, 등

그래서 사용할 수 있습니다 :

grep -c '\.80:' output.txt 

포트 80가 사용 된 모든 시간을 계산합니다. 그러나 사용 된 모든 포트와이 포트에서 발견 된 포트를 표시하는 방법이 있습니다. 이것 바람직 같은 뭔가가 너무 내가 가장 자주 사용 된 포트를 볼 수 있습니다 분류 :

.80: - 54513 
.110: - 12334 
.445: - 412 

답변

33

uniq -c를 참조하십시오. 원하는 비트를 꺼내 결과를 정렬하고 uniq을 통해 파이프를 정렬하고 출력을 정렬 할 수 있습니다. 이 어쩌면 같은 뭔가 :

egrep '\.[0-9]+:' output.txt | sort | uniq -c | sort -nr 

명확한 설명 : 나는 당신의 경우 output.txt 형식이 어떻게 생겼는지 분명하지 않다, 그러나 당신이 원하는 것이기 때문에 여기 그렙을 사용했습니다 실제로 cut를 통해 아마도, 포트 번호 비트를 잘라 또는 awk.

편집 : 포트를 얻으려면, 당신은 콜론에 다시 기간에 한 번 잘라 수 있습니다. (또는 같은 일을 수행 할 수있는 다스 다른 방법 중 하나)

cut -d. -f10 < output.txt | cut -d: -f1 

그 뜻을 정렬되지 않은 포트 목록을 제공합니다. 그 다음 :

cut -d. -f10 < output.txt | cut -d: -f1 | sort | uniq -c | sort -nr 
+0

도움을 주셔서 감사합니다. 하지만 커트에 문제가 있습니다. 정규 표현식만을 사용하여 잘라내는 방법이 있습니까? 포트 번호가 매번 동일한 열과 간격에 있지 않기 때문입니다. – Dragonfly

+0

컷은 정규식을 사용하지 않습니다. 질문을 편집하고 형식을 볼 수 있도록 몇 줄의 예제 행을 추가하십시오. –

+0

좋아, 몇 가지 예를 편집했습니다. 그럼 내가 뭘 추천 해 줄거야? – Dragonfly

관련 문제