상위 5개 소스 IP 주소 찾기(전송된 패킷 수 기준)

상위 5개 소스 IP 주소 찾기(전송된 패킷 수 기준)

저는 주어진 pcap 파일을 기반으로 특정 질문에 대답해야 하는 과제를 수행하고 있습니다. 문제 중 하나는 전송된 패킷 수를 기준으로 상위 5개의 소스 IP 주소를 찾는 것입니다.

나는 다음 명령을 생각해 냈습니다.

$ tshark -r assign1.pcap | sort -n -7 | tail -n 5 | awk '{print $3}'

어디

  • tshark -rpcap 파일 읽기
  • assign.pcap패킷 캡처 파일입니다
  • sort -n -7열 7을 기준으로 파일을 정렬합니다(이 열에는 각 IP 주소의 패킷 길이가 포함되어 있음).
  • tail -n 5가장 큰 패킷 길이를 가진 마지막 5개 레코드를 인쇄합니다.
  • awk '{print $3}세 번째 열만 인쇄됩니다.

uniq이제는 고유한 상위 5개 소스 IP 주소가 필요하기 때문에 이것이 내 문제입니다. 그래서 스크립트 끝에서 파이프 명령을 사용해 보았지만 도움이 되지 않았습니다. 저도 sort -u -t, -k3,3이거 사용해봤는데협회그러나 이것은 고유 IP 주소도 인쇄하지 않습니다!

내 pcap 파일 열 헤더는 다음과 같습니다.

   여기에 이미지 설명을 입력하세요.

답변1

tshark출력물을 재구성하여 활용하시면 -T fields훨씬 수월하실 것 같습니다. 나는 당신이 원하는 것을 다음과 같이 성취할 수 있었습니다.

$ tshark -r blah.pcap -T fields -e frame.len -e ip.src | sort -k 1n | tail -5
92  10.0.2.2
92  10.0.2.2
92  10.0.2.2
100 10.0.2.15
156 10.0.2.15

셔크필드

이 명령을 사용하여 모든 필드 목록을 가져올 수 있습니다.

$ tshark -G field

하지만 읽기가 좀 어려웠던 것 같아요. 출력의 열을 알고 싶다면 -G field여기를 참조하세요.tshark - 네트워크 트래픽 덤프 및 분석:

 * Header Fields
 * -------------
 * Field 1 = 'F'
 * Field 2 = descriptive field name
 * Field 3 = field abbreviation
 * Field 4 = type (textual representation of the ftenum type)
 * Field 5 = parent protocol abbreviation
 * Field 6 = base for display (for integer types); "parent bitfield width" for FT_BOOLEAN
 * Field 7 = bitmask: format: hex: 0x....
 * Field 8 = blurb describing field

충분히 용감하다면 다음을 사용하여 grep출력을 필터링할 수 있습니다.

$ tshark -G fields | grep -P '\s+(ip.src|frame.len)\s+'
F   Frame length on the wire    frame.len   FT_UINT32   frame   BASE_DEC    0x0
F   Source  ip.src  FT_IPv4 ip      0x0

인용하다

답변2

그래서 프롬프트를 받은 후이것답변, 저는 다음 스크립트를 생각해냈습니다.

$ tshark -r assign1.pcap | sort -n -r -k7 | awk '!seen[$3]++' | awk '{print $3}' | head -n 5 >> result.txt

다음 줄의 각 명령을 해석합니다.

  • tshark -r assign1.pcappcap 파일 읽기
  • sort -n -r -k7(-r) (-k7) 열 7의 역순에 따라 숫자로(-n) 파일을 정렬합니다. [이 열에는 각 IP 주소의 패킷 길이가 포함되어 있습니다.]
  • awk '!seen[$3]++'이전에 본 적이 없는 소스 IP 주소(3열)를 인쇄하므로 이 방법으로 고유한 IP만 인쇄됩니다.
  • awk '{print $3}'세 번째 열(소스 IP 주소)만 인쇄합니다.
  • head -n 5 >> result.txt처음 5개가 필요하기 때문에머리명령을 실행하고 마지막으로 >> result.txt최종 결과를 텍스트 파일에 추가합니다.

관련 정보