xargs를 사용하여 tcpdump 다중 pcap

xargs를 사용하여 tcpdump 다중 pcap

여러 개의 pcap을 xargs 루프로 보내서 단일 파일로 tcpdump할 수 있도록 하려고 합니다. Bro's Timemachine의 1GB PCAP 파일입니다.

온라인에는 몇 가지 예가 있지만 제가 할 수 있는 유일한 일은 처리하기 전에 병합하는 것뿐입니다. 이는 매우 프로세서 집약적입니다.

나는 노력했다 ...

ls class_all_1447887* | xargs -t -I file tcpdump -nnr file -w ~/test.cap "src 127.1.0.1"

...하지만 순차적으로 추가하는 대신 각 루프에 대해 test.cap을 다시 생성합니다.

세션을 나누기 위해 먼저 15GB 파일을 만들지 않고 이를 수행할 수 있는 방법이 있습니까?

답변1

tcpdump매번 새 파일을 만드는 대신 tcpdump표준 출력에 쓰고 전체 명령의 출력을 ~/test.cap.

이와 같이:

ls class_all_1447887* |
xargs -t -I file tcpdump -nnr file "src 127.1.0.1" > ~/test.cap

또는 각 입력 파일에 대해 다른 파일을 작성할 수 있습니다.

mkdir ~/test.cap.d
ls class_all_1447887* |
xargs -t -I file tcpdump -nnr file -w ~/test.cap.d/file.tcpd "src 127.1.0.1"

NetMiner 및 Wireshark의 입력 요구 사항이나 출력에 익숙하지 않습니다 tcpdump.

답변2

여러 개의 pcap을 xargs 루프로 보내서 단일 파일로 tcpdump할 수 있도록 하려고 합니다.

Tcpdump는 pcap 파일 병합을 지원하지 않습니다.

mergecap은 작동하지만 CPU를 너무 많이 잡아먹기 때문에 사용하고 싶지 않은 경우,

  1. 모든 파일은 동일한 링크 계층 헤더 유형(예: 이더넷)과 동일한 스냅샷 길이를 갖습니다.
  2. N의 모든 값에 대해 N+1번째 파일의 패킷이 모두 N번째 파일의 패킷을 따르기 때문에 파일을 연결하기만 하면 됩니다.

찾은 문서의 "헤더 동작 예제" 섹션에 있는 것과 유사한 해결 방법을 시도해야 합니다. 이 예는 다른 모든 파일에서 파일 헤더를 제거하므로 연결의 첫 번째 파일을 다른 모든 파일과 다르게 처리해야 함을 의미합니다.아니요첫 번째 파일.

이 작업을 수행하는 스크립트는 다음과 같습니다.

#! /bin/sh
first_file=yes
for i in class_all_1447887*
do
    if [ "$first_file" = "no" ]
    then
        #
        # Strip off file header from tcpdump's output.
        #
        tcpdump -r "$i" -w - "src 127.1.0.1" | \
            (dd of=/dev/null bs=24 count=1; cat)
    else
        tcpdump -r "$i" -w - "src 127.1.0.1"
        first_file=no
    fi
done > test.cap

관련 정보