여러 개의 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를 너무 많이 잡아먹기 때문에 사용하고 싶지 않은 경우,
- 모든 파일은 동일한 링크 계층 헤더 유형(예: 이더넷)과 동일한 스냅샷 길이를 갖습니다.
- 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