perl 스크립트 내에서 tcpdump로 캡처를 시도합니다. 아이디어는 10000 패킷 또는 10 초 중 빠른 날짜를 캡처하는 것입니다. 나는 10000 패킷에 대해 작동하는 코드를 가지고 있지만, 만약 내가 그것을 취소하기 위해 tcpdump에 SIGINT
또는 SIGTERM
을 보내면 출력은 tcpdump의 원시 출력을 처리하는 스크립트의 나머지 부분에서 문제를 일으키는 손상된 것으로 보인다.캡처를 손상시키지 않고 tcpdump를 종료합니다.
관련 펄 코드 : 나는 사람에서 읽은 바로는
tshark: "TheDumpFileFromAbove" appears to have been cut short in the middle of a packet.
:
defined(my $pid = fork()) or die "Cannot fork: $!";
if($pid){
#parent
my ($kid,$wait_time) = (0,0);
do{
sleep 1;
$wait_time++;
$kid = waitpid(-1, WNOHANG);
}until ($kid > 0 || $wait_time > $MAX_TIME_SEC);
#kill the child
if ($kid <= 0){
kill('SIGTERM',$pid);
}
}else{
#child runs tcpdump to get raw data and write it to a temporary file
exec('tcpdump','-ieth1','-s0','-c'.$MAX_PACKETS,'-w'.$dmp_name);
}
다음에 어떻게됩니까은 tcpdump에 의해 생성 된 덤프 파일이 오류가 발생하는 tshark
에 공급된다는 점이다 페이지를 tcpdump의 SIGTERM
또는 SIGINT
으로 올바르게 보내야합니다. (두 가지 모두 시도해 보았습니다) :
if run with the -c flag, it will capture packets until it is interrupted by a SIGINT or SIGTERM signal or the specified number of packets have been processed.
것은, 내가 생각하지 않는다 : 그래서 해결책은 tcpdump와는 tcpdump와의 출력을 처리하는 다음 명령에 계속하기 전에 완료 될 때까지 기다리는 것입니다 당신이 그것에 대해 할 수있는 일이 있습니다. – Barmar
tshark에서 오류를 무시할 수 없습니까? –
@JimGarrison, tshark가 해당 오류로 인해 파일을 처리하지 못함 – Ryley