TCP 연결로 pcap 파일을 분할하는 도구? [닫은]


16

패킷 캡처 파일 (pcap 형식)을 각 TCP 연결에 대해 별도의 파일로 분할하는 도구가 있습니까? (아마도 집에서 자라는 쉘 스크립트가 아닌 캡처에서 두 번 실행해야합니다 ...). wireshark의 'TCP 스트림 따르기'와 같은 것이지만 명령 줄에 적합합니다 (700MB 패킷 캡처를 표시하면 wireshark가 많은 양의 메모리를 소비하게 될 것입니다)

나는 보았다 tcpflow 하지만 원래 PCAP 파일보다 훨씬 더 큰 파일을 생성하는 것하고는 PCAP 형식이어야하지 않을 것 같다.


tcpflow의 결과 파일은 pcap이 아니며 tcp 스트림의 실제 tcp 페이로드입니다.
chris

답변:


9

PcapPlusPlus 패키지의 일부인 PcapSplitter 를 사용할 수도 있습니다 . 정확히 필요한 것 (TCP 또는 UDP 연결로 pcap 파일을 분할하는 것), 다중 플랫폼이며 원본 파일의 연결 수에 제한이 없으므로 큰 분할에 사용할 수 있습니다 수천 개 이상의 연결을 포함하는 pcap 파일). 위의 링크는 소스 코드입니다,하지만 당신은 컴파일 된 바이너리를 원하는 경우 - 여기에 내가 여러 플랫폼에서 만들어진 바이너리에 대한 링크입니다

편집 : 분명히 새로운 버전의 PcapPlusPlus가 출시되었으며 많은 플랫폼 (Windows, Ubuntu 12.04 / 14.04, Mac OSX Mavericks / Yosemite / El Captian)을위한 PcapSplitter 바이너리가 포함되어 있습니다. 이전에 제공 한 링크보다이 바이너리를 사용하는 것이 좋습니다. 여기에서 찾을 수 있습니다


10

tcpdump원하는 pcap 부분을 추출하는 데 사용할 수 있습니다 ... 한 호스트의 TCP / 55777과 다른 호스트의 TCP / 80 사이의 소켓 연결에서 패킷을 찾고 있다고 가정하십시오. 소스 파일은 bigfile.pcap문제의 웹 호스트에 대한 많은 HTTP 세션의 스니퍼 덤프입니다.

tcpdump -r bigfile.pcap -w session.pcap -s0 tcp and port 55777

그러면 TCP / 55777과주고받는 모든 패킷을 가져 와서에 bigfile.pcap복사합니다 session.pcap.


? -s0와 함께 사용하면 효과가 -r있습니까?
kasperd

4

약간 과잉이지만 tshark(으로 제공 wireshark)을 사용하면 다음과 zsh같이 할 수 있습니다 .

file=file.pcap
tshark -Tfields -e tcp.stream \
                -e frame.time_epoch \
                -e ip.src \
                -e tcp.srcport \
                -e ip.dst \
                -e tcp.dstport -r $file |
  sort -snu |
  while read -A f; do 
    tshark -r $file -2R "tcp.stream == $f[1]" -w ${(j:-:)f[2,-1]}.pcap
  done

다음은 이름이 같은 파일을 생성합니다 1509466312.202450000-10.0.0.1-58892-10.0.0.2-80.pcap(각 연결에서 본 첫 번째 패킷을 기준으로 함).


3

tcpflow는 당신이 원하는 것입니다-TCP 세션 당 pcap을 하나의 파일로 나눕니다.

http://www.circlemud.org/jelson/software/tcpflow/


3
질문에서 언급했듯이, 나는 그것을 시도했고 결과 출력 파일이 입력 (pcap) 파일보다 훨씬 큰 이유를 이해하지 못했습니다 ...
Andre Holzner

1
또한 tcpflow는 pcap 파일을 출력 할 수없는 것 같습니다.
takumar

2

작동 할 수있는이 도구가있는 것 같습니다 (개인적으로 사용하지는 않았습니다)

http://www.netresec.com/?page=SplitCap(Windows 기반)

SplitCap은 비어있는 오픈 소스 pcap 파일 스플리터입니다. SplitCap은 TCP 및 UDP 세션을 기반으로 하나의 큰 pcap 파일을 세션 당 하나의 pcap 파일로 분할합니다. SplitCap을 사용하여 pcap 파일을 세션 대신 호스트 쌍당 하나의 pcap 파일로 분할 할 수도 있습니다.


1

@sch에서 영감을 얻은 bash 버전은 다음과 같습니다.

file=cap.pcap
$tshark -Tfields -e tcp.stream \
                -e frame.time_epoch \
                -e ip.src \
                -e tcp.srcport \
                -e ip.dst \
                -e tcp.dstport -r $file |
  sort -snu |
  while read -a f; do 
  [[ "${f[5]}" ]] || continue  # sometimes there is no stream number ex. UDP
  fileout=$(echo ${f[0]}__${f[1]}__${f[2]}__${f[3]}__${f[4]}__${f[5]} | tr -d '\r'  )
    $tshark -r $file -2R "tcp.stream == ${f[0]}" -w "$fileout.pcap"
  done
read

파일 이름은 다음과 같습니다. stream number__time__source IP__port__destination IP__port.pcap

tr -d '\r' Windows의 tshark는 CR LF를 출력하므로 Windows 사용자를위한 것입니다.

편집 :

tshark가있는이 솔루션은 너무 느리지 만 확실합니다. SplitCap은 빠르지 만 일부 패킷에 오류가 있으면 충돌이 발생하지만 tshark는 오류에 대해서만 알려주지 만 계속 진행하십시오.

tshark: The file "cap.pcap" appears to have been cut short in the middle of a packet.

마지막으로 PcapSplitter가 빠르지 만 winpcap 드라이버가 필요합니다 .Windows의 npcap 드라이버와 작동하지 않습니다.

사용 : 그러나 SplitCap에 대한 해결책이 pcapfix을 SplitCap 다시 충돌하지 그럼 난 손상된 패킷을 해결할 수는. 그리고 이것은 tshark가 분할 속도가 너무 느리기 때문에 지금 사용하고 있습니다.

PcapSplitter에 대한 해결책은 어떤 방법을 사용하여 winpcap dll을 주입하는 것이지만 SplitCap이있는 동안 왜 그렇게합니까?

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.