BEGIN { | |
# we need the number of bytes in a packet to do the output | |
# in packet numbers rather than byte numbers. | |
if (packetsize <= 0) | |
packetsize = 512 | |
expectNext = 1 | |
lastwin = -1 | |
} | |
{ | |
# convert tcp trace to send/ack form. | |
n = split ($1,t,":") | |
tim = t[1]*3600 + t[2]*60 + t[3] | |
if (NR <= 1) { | |
tzero = tim | |
ltim = tim | |
OFS = "\t" | |
} | |
if ($6 != "ack") { | |
# we have a data packet record: | |
# ignore guys with syn, fin or reset 'cause we | |
# can't handle their sequence numbers. Try to | |
# detect and add a flag character for 'anomalies': | |
# * -> re-sent packet | |
# - -> packet after hole (missing packet(s)) | |
# # -> odd size packet | |
if ($5 !~ /[SFR]/) { | |
i = index($6,":") | |
j = index($6,"(") | |
strtSeq = substr($6,1,i-1) | |
endSeq = substr($6,i+1,j-i-1) | |
len = endSeq - strtSeq | |
id = endSeq | |
if (! timeOf[id]) | |
timeOf[id] = tim | |
if (endSeq - expectNext < 0) | |
flag = "*" | |
else { | |
if (strtSeq - expectNext > 0) | |
flag = "-" | |
else if (len != packetsize) | |
flag = "#" | |
else | |
flag = " " | |
expectNext = endSeq | |
} | |
printf "%7.2f\t%7.2f\t%s send %s %d", tim-tzero, tim-ltim,\ | |
flag, $5, strtSeq | |
if (++timesSent[id] > 1) | |
printf " (%.2f) [%d]", tim - timeOf[id], timesSent[id] | |
if (len != packetsize) | |
printf " <%d>", len | |
} | |
} else { | |
id = $7 | |
printf "%7.2f\t%7.2f\t%s ack %s %d", tim-tzero, tim-ltim,\ | |
flag, $5, id | |
if ($9 != lastwin) { | |
printf " win %d", $9 | |
lastwin = $9 | |
} | |
printf " (%.2f)", tim - timeOf[id] | |
if (++timesAcked[id] > 1) | |
printf " [%d]", timesAcked[id] | |
} | |
printf "\n" | |
ltim = tim | |
} |