Si vous souhaitez automatiser le post-traitement TCPtrace, j'ai déja écris un bout de code avec perl :
###################### TRAITEMENT DU FICIHIER .cap ######################
`/usr/bin/tcptrace --nores_addr -lrW $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.cap > $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace`;
###################### TRAITEMENT DU FICHIER .tcptrace ######################
### actual data pkts : PAQUETS ECHANGES ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "actual data pkts:"`;
$tmp = substr($valeur[0],23,10);
my $DownPaquets = sprintf("%.0f", $tmp);
$tmp = substr($valeur[1],23,10);
my $UpPaquets = sprintf("%.0f", $tmp);
if ($DownPaquets == 0) { `/bin/rm $Ramdisk_Dir/vigie.txt`; print "\nERREUR Nb paquets download = 0\n"; die "===> Paquets download = 0\n"; }
if ($UpPaquets == 0) { `/bin/rm $Ramdisk_Dir/vigie.txt`; print "\nERREUR Nb paquets upload = 0\n"; die "===> Paquets upload = 0\n"; }
### rexmt data pkts : PAQUETS RE-EMIS EN DOWNLOAD - PAQUETS RECUS EN DOUBLE (dupliqués) EN UPLAOD ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "rexmt data pkts:"`;
$tmp = substr($valeur[0],23,10);
my $DownPktsRetransmis = sprintf("%.0f", $tmp);
$tmp = substr($valeur[1],23,10);
my $UpPktsDupliques = sprintf("%.0f", $tmp);
### outoforder pkts : PAQUETS PERDU EN UPLOAD ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "outoforder pkts:"`;
# outoforder pkts : TRAITEMENT 2eme LIGNE (upload)
$tmp = substr($valeur[1],23,10);
my $UpPktsPerdus = sprintf("%.0f", $tmp);
### Calcul des pourcentages ###
my $DownPaquetsUtile = $DownPaquets - $DownPktsRetransmis;
my $UpPaquetsUtile = $UpPaquets - $UpPktsDupliques;
my $UpPaquetsTotalCli = $UpPaquets + $UpPktsPerdus;
my $DownPcentRetransmis = sprintf("%.3f", 100 * $DownPktsRetransmis / $DownPaquetsUtile);
my $UpPcentDupliques = sprintf("%.3f", 100 * $UpPktsDupliques / $UpPaquetsUtile);
my $UpPcentPerdus = sprintf("%.3f", 100 * $UpPktsPerdus / $UpPaquetsUtile);
### Calcul des paquets retransmis en upload ###
my $UpPcentRetransmis = sprintf("%.3f", $UpPcentPerdus + $UpPcentDupliques);
### DUPLICATE ACKS ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "duplicate acks:"`;
my $DownPktsdupacks = substr($valeur[0],23,10);
my $DownPcentdupacks = sprintf("%.3f", 100 * $DownPktsdupacks / $DownPaquetsUtile);
my $UpPktsdupacks = substr($valeur[1],23,10);
my $UpPcentdupacks = sprintf("%.3f", 100 * $UpPktsdupacks / $UpPaquetsUtile);
### TRIPLE DUPACKS ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "triple dupacks:"`;
my $DownPkts3dupacks = substr($valeur[0],23,10);
my $DownPcent3dupacks = sprintf("%.3f", 100 * $DownPkts3dupacks / $DownPaquetsUtile);
my $UpPkts3dupacks = substr($valeur[1],23,10);
my $UpPcent3dupacks = sprintf("%.3f", 100 * $UpPkts3dupacks / $UpPaquetsUtile);
### SEGMENTS ACQUITTES ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep " ack pkts sent:"`;
my $DownSegmentsAck = substr($valeur[0],23,10);
my $UpSegmentsAck = substr($valeur[1],23,10);
if ($DownSegmentsAck == 0) { `/bin/rm $Ramdisk_Dir/vigie.txt`; print "\nERREUR ségments acquittés down = 0\n"; die "===> ségments acquittés down = 0\n"; }
if ($UpSegmentsAck == 0) { `/bin/rm $Ramdisk_Dir/vigie.txt`; print "\nERREUR ségments acquittés up = 0\n"; die "===> ségments acquittés up= 0\n"; }
### PAQUETS ACK ENVOYES ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "segs cum acked:"`;
my $DownPktsAck = substr($valeur[0],23,10);
my $UpPktsAck = substr($valeur[1],23,10);
my $DownPcentPktsAck = sprintf("%.1f", 100 * $DownPktsAck / $DownSegmentsAck);
my $UpPcentPktsAck = sprintf("%.1f", 100 * $UpPktsAck / $UpSegmentsAck);
### MSS MAX ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "max segm size:"`;
$tmp = substr($valeur[0],23,10);
my $DownMss = sprintf("%.0f", $tmp);
$tmp = $tmp + 40; # MTU = MSS + 40 (20 entete TCP et 20 entete IP)
my $DownMtu = sprintf("%.0f", $tmp);
$tmp = substr($valeur[1],23,10);
my $UpMss = sprintf("%.0f", $tmp);
$tmp = $tmp + 40; # MTU = MSS + 40 (20 entete TCP et 20 entete IP)
my $UpMtu = sprintf("%.0f", $tmp);
### RWIN MAX ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "max win adv:"`;
$tmp = substr($valeur[0],62,10);
my $DownRwinMax = sprintf("%.1f", $tmp / 1000);
$tmp = substr($valeur[1],62,10);
my $UpRwinMax = sprintf("%.1f", $tmp / 1000);
### RTT ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "RTT full_sz min:"`;
$tmp = substr($valeur[0],23,10);
my $DownRttFullSzMin = sprintf("%.1f", $tmp);
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "RTT full_sz max:"`;
$tmp = substr($valeur[0],23,10);
my $DownRttFullSzMax = sprintf("%.1f", $tmp);
$tmp = substr($valeur[1],23,10);
my $GigueInterneSrvMax = sprintf("%.1f", $tmp);
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "RTT full_sz avg:"`;
$tmp = substr($valeur[0],23,10);
my $DownRttFullSzAvg = sprintf("%.1f", $tmp);
### TAILLE TOTALE ECHANGEE (INCLUS RETRANSMISSIONS) ###
@valeur = `/bin/cat $Ramdisk_Dir/$Port/$Client_Ip-$Client_id.tcptrace |/bin/grep "actual data bytes:"`;
$tmp = substr($valeur[0],23,10);
my $DownTransTotal = sprintf("%.2f", $tmp / 1000000);
$tmp = substr($valeur[1],23,10);
my $UpTransTotal = sprintf("%.2f", $tmp / 1000000);
### Calcul de la gigue ###
my $DownGigueInf = $DownRttFullSzAvg - $DownRttFullSzMin;
my $DownGigueSup = $DownRttFullSzMax - $DownRttFullSzAvg;
$tmp = ( $DownGigueInf > $DownGigueSup ) ? $DownGigueInf : $DownGigueSup;
my $DownGigueMax = sprintf("%.1f", $tmp);