Текст может быть преобразован в PCAP, насколько это возможно из ограниченной информации, представленной в выводе tcpdump
, например.
#!/usr/bin/env perl
use 5.14.0;
use warnings;
use Time::Piece;
# get this from CPAN
use File::PCAP::Writer ();
my $fpw = File::PCAP::Writer->new( { fname => 'out.pcap' } );
# read tcpdump output from files or standard input
shift @ARGV if @ARGV == 1 and $ARGV[0] eq '-';
while (readline) {
my ( $stamp, $usec ) = $_ =~ m/^(\d\d:\d\d:\d\d) [.] (\d+) \s IP \s /ax;
# blindly assume packets all from the same day that is today
my $now = localtime;
$stamp = $now->ymd. ' '. $stamp;
my $epoch = Time::Piece->strptime( $stamp, "%Y-%m-%d %H:%M:%S" )->epoch;
# fake an empty packet. this gets timestamps into Wireshark,
# which may suffice to only graph packets per time
$fpw->packet( $epoch, $usec, 0, 0, '' );
}
хотя потребуется больше кода для правильной обработки меток времени, которые переносятся на следующий день (или, упс, на какую-то последующую дату? )и правильно подделывать пакеты с подсказками, указанными в выводе tcpdump
(, например. сделать фрейм, сделать IP (с IP-адресами ), сделать TCP или UDP пакет правильного размера и портов, как насчет ARP и других протоколов, и т.д. и т.п.).
Вместо пакетов в секунду из временных меток без суеты PCAP можно было бы сначала использовать эпоху -до -пакетов -, видимых -в -, что -второй сценарий:
#!/usr/bin/env perl
use 5.14.0;
use warnings;
use Time::Piece;
# start epoch
my $day = 1505199600;
my $counter = 0;
my $prev_secs = -1;
my $prev_ts;
shift @ARGV if @ARGV == 1 and $ARGV[0] eq '-';
while (readline) {
my ($hhmmss) = $_ =~ m/^(\d\d:\d\d:\d\d) [.] /ax;
my $secs = Time::Piece->strptime( $hhmmss, "%H:%M:%S" )->epoch;
# KLUGE assume next day
$day += 86400 if $secs < $prev_secs;
my $timestamp = $day + $secs;
if ( defined $prev_ts and $timestamp != $prev_ts ) {
say "$prev_ts $counter";
$counter = 0;
}
$counter++;
$prev_secs = $secs;
$prev_ts = $timestamp;
}
say "$prev_ts $counter";
А затем передайте преобразованный вывод tcpdump
в R для построения графика (Я подделал временную метку следующего дня, так как все ваши данные относятся к одной и той же секунде):
$ head -1 dumptext
20:39:12.808672 IP 94.xx.xxx.202.49183 > 151.xx.xx.xx.61479: UDP, length 104
$ tail -1 dumptext
00:31:18.123456 IP 79.xxx.xxx.216.56254 > 151.xx.xx.xx.443: Flags [P.], seq 1723903877:1723904632, ack 3204952387, win 260, length 755
$ perl torrr dumptext > dataforr
$ cat dataforr
1505273952 10
1505287878 1
$ R
> x=read.table("dataforr")
> x
V1 V2
1 1505273952 10
2 1505287878 1
> names(x)=c('date','packets')
> x$date=strptime(x$date,"%s")
> x
date packets
1 2017-09-12 20:39:12 10
2 2017-09-13 00:31:18 1
> plot(x,type='l')
>
mv скопирует «последний» объект в место назначения. В вашем случае вы можете сначала создать каталог назначения, а затем переместить файлы
mkdir /dir2/dir1/
mv /dir1/subdir/ /dir2/dir1/
или используйте rsync для копирования и удаления источника, а затем
rsync -av dir1 dir2/
sending incremental file list
dir1/
dir1/subdir/
dir1/subdir/test1
dir1/subdir/test2
rm -r dir1