저는 주어진 pcap 파일을 기반으로 특정 질문에 대답해야 하는 과제를 수행하고 있습니다. 문제 중 하나는 전송된 패킷 수를 기준으로 상위 5개의 소스 IP 주소를 찾는 것입니다.
나는 다음 명령을 생각해 냈습니다.
$ tshark -r assign1.pcap | sort -n -7 | tail -n 5 | awk '{print $3}'
어디
tshark -r
pcap 파일 읽기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.pcap
pcap 파일 읽기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
최종 결과를 텍스트 파일에 추가합니다.