elof2 | 1 Feb 15:10
Picon
Favicon

Re: Detect packet drops


On Fri, 27 Jan 2012, Carter Bullard wrote:
> OK, as I have mentioned before, we do distinguish between 'skipped' sequence numbers,
> out of order sequence numbers, and retransmitted numbers (data and asks)

Great! Then all that's left to do is to set the appropriate output tags.

What I asked for is actually a much simplier function than what has been 
discussed in the spawned "Another vote for packet drop detection"-thread.

See below for my whishes.

> The duplicates,
> such as multiple copies of the exact same packet, is detectable and I put code in to do
> this, although I don't have any packet files that have the conditions that you describe to
> verify if they are correct or not, so I haven't finished the support.

Such a pcap or argus-logfile is easily created by configuring a Cisco SPAN 
to mirror *both* rx and tx for a vlan or *both* rx and tx for two 
switchports:
    _______
A-|1      |
B-|2    48|-Sniffer
    -------

Example of configuration syntax:
monitor session 1 source vlan nnn both   or
monitor session 1 source interface gigabit 1-2 both

A packet from A to B will then be copied:
(Continue reading)

Carter Bullard | 1 Feb 17:30

Re: Detect packet drops

Hey /Elof
Well, sometimes you get what you ask for, sometimes you get a little more.

I do not have access to a SPAN port to create the file.  If someone could do that
and provide the packet trace, that would be most excellent !!!!!

Detecting that this packet is identical to a previous packet can be very expensive,
especially at 2M pkts/sec, so in order to do this, we have to have a very fast
identification stage.  In TCP we do have the sequence number, and so
comparing just that, in the context of the TCP flow cache, is pretty good.
We do have a lasttime timestamp in the flow cache, but there is some uncertainty.

Unfortunately, problems like, redirected forwarding, can pass data that
appears identical to the sensor within the tolerances available (1uSec?),
but the packets are not identical, so I have to do some things in the retrans
logic to tease this stuff out.  Thats why I need at least a standard packet file
that has the condition to detect.

I'll add some new status flags for these new conditions.  'G' for gaps sounds good?
Hope all is most excellent !!!!

Carter


On Feb 1, 2012, at 9:10 AM, elof2 <at> sentor.se wrote:


On Fri, 27 Jan 2012, Carter Bullard wrote:
OK, as I have mentioned before, we do distinguish between 'skipped' sequence numbers,
out of order sequence numbers, and retransmitted numbers (data and asks)

Great! Then all that's left to do is to set the appropriate output tags.

What I asked for is actually a much simplier function than what has been discussed in the spawned "Another vote for packet drop detection"-thread.

See below for my whishes.


The duplicates,
such as multiple copies of the exact same packet, is detectable and I put code in to do
this, although I don't have any packet files that have the conditions that you describe to
verify if they are correct or not, so I haven't finished the support.

Such a pcap or argus-logfile is easily created by configuring a Cisco SPAN to mirror *both* rx and tx for a vlan or *both* rx and tx for two switchports:
  _______
A-|1      |
B-|2    48|-Sniffer
  -------

Example of configuration syntax:
monitor session 1 source vlan nnn both   or
monitor session 1 source interface gigabit 1-2 both

A packet from A to B will then be copied:
rx on port 1 --> copy to port 48
tx on port 2 --> copy to port 48
...and vice versa for the replies:
rx on port 2 --> copy to port 48
tx on port 1 --> copy to port 48

...or if the same packet is received by a vlan and then transmitted, two identical copies will be sent.

I have never seen a packet stream to the sniffer where another packet is inserted in between the two copies, so the detection need not to be advanced, simply look if the next received packet is idential to the current one, and that it was received extremely fast after the first one. Then tag this flow as 'Duplicate packet(s) exist'.

However, if the second packet is identical to the first, but it was seen after more than NN milliseconds, don't tag this as as a duplicate, but handle it under the existing 'TCP Retransmission' tags.
Since the TCP retransmission function introduce a delay before a packet is retransmitted, you can distinguish between duplicates and retransmissions.

Result: you have solved the current issue in argus where duplicates are incorrectly tagged as retransmissions.


The problems in guaranteeing that you can count every drop, in this case for TCP are these.

There's no need to count every gap. All I need is a tag to indicate that gaps exist. If lots of flows get this tag, I need to investigate where packets are dropped.
Just like if a lot of flows are tagged with ECN, Window closures or Retransmissions, then I will investigate the situation to make sure that it is not my own servers/routers that are the problem.

(but having fields and counters for [sd]gap doesn't hurt. It just complements the tag)



If/when the new functions are in place, you need to review all the man-pages and make sure to distinguish between the words "loss" and "drop" so that it is clear what tags (and counters) are related to the real traffic between src and dst, and what tags (and counters) are related to the SPAN/pcap/bpf mirroring environment.


The best way to see all indications of loss is to look at the ACK behavior from the receiver.
Selective ACK advertisements are the best way to track loss, as you'll get a fine grain reporting
of what the receiver didn't receive.  Without selective ACK, you don't know how many packets
in a window were lost, you just know that at least 1 was lost.

As I said, I really don't need a count of unique missing packets. It is enough to tag tcp flows with 'Gap in stream' when detected.
If I see lots of flows with this tag I will start looking for performance/SPAN-problems. (again, a sd[gap] field with counters is interesting as well, but not really neccesary if it introduces a performance impact, or if you need to do heavy argus rewrites).


I agree that the easiest way, and most accurate, is to look solely at the selective ack, so do just that! Describe in the man-page that the 'Gap in stream' tag is only watching for and detecting gaps in tcp-flows with Selective Ack enabled. All other kinds of packet-loss are too hard to detect, or would introduce a too big performance impact in argus.
...or something like that...

By only looking at selective acks, you're also spared from the problems Wireshark has, dealing with drops or out-of-order packets in the SYN phase or the FIN pase of the flow.


So what's the big deal ?  Are you so into the QoS part of this that each packet lost is important
to your analysis?

Oh no, the big deal is a small deal!

* I just want ra to add a tag to flows that are missing packets.
 Just as ra add a "v" to all VLAN-tagged flows, I want a tag for flows
 with detected gaps in them.
 If I see this tag frequently, I know something is wrong. Just like if I
 see lots of "ICMP events mapped to this flow", ECN, Window closure or
 Retransmissions...

 As I stated in my previous email, I think you should add a new
 proto-column for this tag.


Another small deal is:

* Argus is currently tagging duplicates as retransmissions. This is wrong.
 It is also misleading since you can have 100% perfect flows with no
 packet loss and no tcp retransmissions, yet argus indicate lots of * s d
 tags on lots of flows due to external forces, i.e. incorrect SPAN setup.



Naturally, my whishes and the more advanced ones in the "Another vote for packet drop detection"-thread complement eachother. The perfect solution would be to have both my new tags AND new fields like [sd]gap.

/Elof



On Jan 26, 2012, at 5:37 AM, elof2 <at> sentor.se wrote:


On Wed, 25 Jan 2012, Peter Van Epp wrote:
On Wed, Jan 25, 2012 at 02:02:08PM +0100, elof2 <at> sentor.se wrote:
Any more thoughts or progress with this?

I just realised that I can't even rely on Wireshark for an estimate
of dropped packets, since Wireshark's Expert Info "ACKed lost
segment" tag out-of-order FIN-packets as "ACKed lost segment".

What I'm looking for is not a 100% accurate system to count every
missing packet (which is impossible to determine), but a flag on
each session that argus know is missing one or more packets.
Just like the flag for retransmission doesn't say how many
retransmissions there were in a tcp flow.

Checking the pcap reported loss rate (its in the man records which
you have to enable to see these days) will give you an indication, although
it is only one of the several ways your sensor can be losing packets, is one
good indication of how your sensor is doing. There is an explaination of a
number of the possible (and usually invisible) loss points in a sensor on
Carter's web site at http://www.qosient.com/argus/sensorPerformance.shtml as
well.


Hi Peter.
Thanks for your input.

Ah, didn't know about the hidden pcap drop counters. I will take a look at it.

However... Even though I can see the pcap drop count, I still think it would be nice if argus could tag individual flows where it has detected gaps.
The tag would give us argus users a notification that not all traffic is monitored 100%. An informative tag just like the out-of-order tag or ECN tag.

I now realise that my suggestion of having tags like "dropped externally" and "dropped internally" is not feasable, since there's no way to correlate the pcap drop counter to specific flows, so ignore this.

Apart from simply being informed that the monitored traffic is not 100%, I would also very much like to be able to determine if the drops occur outside of the sensor, i.e. the switch drop lots of packets while the sensor drop nothing.
With the tag above, and a pcap-drop-counter in the argus man-records it should be easier to spot that external drops occur.
(naturally, if you have both external drops and internal drops, it will be hard to investigate, but that's always the case. If I'm sure I have 0 drops within my sniffing machine, then all flows tagged with gaps must be due to drops in the external switch or tap (or faulty DAG/DAC drivers that doesn't report their own drop count, but that is a completely different matter).


Comparing the RMON traffic counts reported by the switch feeding your
sensor against the argus counts is another way although syncronizing the two
counts can be exciting :-). Both of these only indicate loss of data that makes
it as far as your sensor of course and isn't an indication of loss else where
in the path but thats a start ...

Hehe, this is not possible since in many cases the SPAN port is not managed by me. I just manage the sensor receiving the mirrored traffic, but it is someone else who has setup the SPAN configuration.
So diffing the reported drop-numbers is practically not feasable.

As well using something like tcpreplay from a pcap file with suitable
hardware (which can get very hard at high speed of course :-)) feeding in to
your sensor can give you a known input traffic pattern to estimate sensor loss
as well.

Now you're rather talking about detecting local sensor loss. What I'm primarily asking for is a way to easily detect that there are external packet loss.

Currently I'm sniffing e.g. 100 000 packets with tcpdump, making sure nothing is dropped locally. In this case it took 3 seconds to gather 100 000 packets. I scp the pcap file to a machine running Wireshark. I open up the "Expert Info Composite" and look at "ACKed lost segment" and "Previous segment lost".
In an environment where the traffic is mirrored correctly, these two counters give me an estimate as to how many gaps there are in the tcp flows in the pcap file (disregarding a couple of false positives at capture startup).
...that is, I can see if the people feeding me mirrored traffic have problems in their end.

This procedure is quite tiresome. Also, it is unreliable when the mirrored packets are received out of order (common in redundant/loadbalanced environments), then Wireshark will tag packets as lost even though they exist.

/Elof



Attachment (smime.p7s): application/pkcs7-signature, 4367 bytes
Carter Bullard | 1 Feb 21:22

Re: Another vote for packet drop detection

Gentle people,
As I test the algorithms for gap detection, a few things are coming up, causing
me to simplify the strategy a bit.

There are two situations for TCP, and any other connection oriented transport
protocol.  When we are seeing both sides of the conversation, and when we
are not.  When we are seeing both sides, we can correlate received ACK's with
transmitted sequence numbers, and tick a status bit saying we've observed gaps
if there are discrepancies.   This will be very sensitive, but the condition itself
is not enough to know how much data was missed.

When we are seeing only one side, we can report gaps in the sequence numbers,
just by knowing the sequence number range, and comparing that against the
observed bytes.  As long as we account for sequence numbers out of order
this works very well.  However, when there are retransmissions, this method
breaks down.  Our observed bytes within a sequence number range can't
really be compared to give a realistic value, unless we are tracking retransmitted
bytes.  Currently argus does not track this metric, it tracks numbers of retransmitted
packets.  I'll change this for argus-3.1.0.

As a result, we will use the uni-directional algorithm to report gaps as unobserved
bytes, when there is no evidence of retransmissions.  I'm going to put a ' g ' in the
status flags field in the same column (#4) as the loss indicators,  when there are gaps.
I won't worry about the indication from argus, until argus-3.1.0 when we can change
the "retrans" metrics and their reporting.

Fields are called 'sgap' and 'dgap', and the Column labels are "SrcGap" and "DstGap".
There is support for printing, including xml, graphing, etc…. but there is no support
yet for filtering or sorting yet.  That is important, so I'll put that in before
I release the code.  Should be today or tomorrow.

The other protocol that we should implement this for is RTP.  Because RTCP, the
reverse control channel for RTP, contains loss values, we can compare the two
to realize that we are not seeing all the RTP traffic, but RTCP is not reporting loss.
This would be our indication of gaps in the RTP stream.  I'll work on that much later.

Carter
Attachment (smime.p7s): application/pkcs7-signature, 4367 bytes
Carter Bullard | 2 Feb 04:45

argus-3.0.5.10 and argus-clients-3.0.5.31

Gentle people,
New argus and argus-client software is now available on the server:


These packages have a number of bug fixes and new features, as discussed
on the mailing list.  Argus implements new support for gap tracking and
reporting, and fixes a few bugs in loss reporting, and TCP byte accountability
for when flows exceed 4GB.  Clients now can report on "sgap" and "dgap"
metrics.  I still need to implement gap filtering.  For argus data earlier than
argus-3.0.5.30, gap reporting is not supported.   ra* programs should do
the right thing.  I tested with argus-3.0.5.30, argus-3.0.4 and argus-2.x data.

There are a few bugs not on the mailing list that have also
been fixed, particularly, printing user buffers larger than 300+ bytes.
This would cause a core dump.

Manpages, and usage output when you run a program with the -h option
should be up to date now.  New manpages are available, and most have
been updated.

Please take a look at these packages, and provide feedback, if you 
notice anything a miss.

Thanks for all the support,

Carter


On Feb 1, 2012, at 3:22 PM, Carter Bullard wrote:

Gentle people,
As I test the algorithms for gap detection, a few things are coming up, causing
me to simplify the strategy a bit.

There are two situations for TCP, and any other connection oriented transport
protocol.  When we are seeing both sides of the conversation, and when we
are not.  When we are seeing both sides, we can correlate received ACK's with
transmitted sequence numbers, and tick a status bit saying we've observed gaps
if there are discrepancies.   This will be very sensitive, but the condition itself
is not enough to know how much data was missed.

When we are seeing only one side, we can report gaps in the sequence numbers,
just by knowing the sequence number range, and comparing that against the
observed bytes.  As long as we account for sequence numbers out of order
this works very well.  However, when there are retransmissions, this method
breaks down.  Our observed bytes within a sequence number range can't
really be compared to give a realistic value, unless we are tracking retransmitted
bytes.  Currently argus does not track this metric, it tracks numbers of retransmitted
packets.  I'll change this for argus-3.1.0.

As a result, we will use the uni-directional algorithm to report gaps as unobserved
bytes, when there is no evidence of retransmissions.  I'm going to put a ' g ' in the
status flags field in the same column (#4) as the loss indicators,  when there are gaps.
I won't worry about the indication from argus, until argus-3.1.0 when we can change
the "retrans" metrics and their reporting.

Fields are called 'sgap' and 'dgap', and the Column labels are "SrcGap" and "DstGap".
There is support for printing, including xml, graphing, etc…. but there is no support
yet for filtering or sorting yet.  That is important, so I'll put that in before
I release the code.  Should be today or tomorrow.

The other protocol that we should implement this for is RTP.  Because RTCP, the
reverse control channel for RTP, contains loss values, we can compare the two
to realize that we are not seeing all the RTP traffic, but RTCP is not reporting loss.
This would be our indication of gaps in the RTP stream.  I'll work on that much later.

Carter

Attachment (smime.p7s): application/pkcs7-signature, 4367 bytes
Peter Van Epp | 3 Feb 02:46
Picon
Picon
Favicon

Re: Detect packet drops

On Wed, Feb 01, 2012 at 03:10:05PM +0100, elof2 <at> sentor.se wrote:
> 
> On Fri, 27 Jan 2012, Carter Bullard wrote:
> >OK, as I have mentioned before, we do distinguish between 'skipped' sequence numbers,
> >out of order sequence numbers, and retransmitted numbers (data and asks)
> 
> Great! Then all that's left to do is to set the appropriate output tags.
> 
> What I asked for is actually a much simplier function than what has
> been discussed in the spawned "Another vote for packet drop
> detection"-thread.
> 
> See below for my whishes.
> 
> 
> >The duplicates,
> >such as multiple copies of the exact same packet, is detectable and I put code in to do
> >this, although I don't have any packet files that have the conditions that you describe to
> >verify if they are correct or not, so I haven't finished the support.
> 

	As doing this properly is likely to be a performance hog at high link
speeds it may be that argus isn't the right place to do it. In theory given
proper change control (which I well know isn't a given :-)) this should be
only a problem when a switch configuration change is made by the network folks.
I suspect the correct answer is a standalone libpcap application that checks
for this error (multiple copies of an identical packet) on the monitored link
and flags it. At high line speeds it too will have performance problems (it
is very expensive in memory bandwidth to compare two packets) but since thats
all its doing its impact can be less. It also should be a persistant thing
so checking once an hour or once a day may be enough to detect the condition
and correct it. 

Peter Van Epp

Marco | 7 Feb 10:33
Picon

Huge argus files and racluster

Hi, is there any limit on the size an argus file can have? I'm trying
to synthesize about 50GB of pcap data into argus data.
Doing a plain "argus -r hugefile.pcap -w argusdata.argus" works and
produces a 8GB argus file, but then if I try to run racluster on it to
reduce it further, it just seems to hang after a while.

I did some experiment, and I tried creating multiple argus files and
merge tem in successive iteration, but the final merge always fails.
When I say "fails", I mean that it looks like racluster is working up
to a point (ie, disk activity, strace shows it's reading data), but
from a certain point on, it just appears to be hung. Strace, shows
nothing, ltrace shows lots of stuff like

gettimeofday(0xcdd866b8, NULL)
                                               = 0
pthread_mutex_lock(0x2303268, 1, 435251, 0, 0x2303268)
                                               = 0
pthread_mutex_unlock(0x2303268, 1, 0xcdd866a0, 0xcdd866a0, 0x2303268)
                                               = 0
pthread_mutex_lock(0x2303268, 0xcdd87830, 1, 0x4f2be088, 0)
                                               = 0
pthread_mutex_unlock(0x2303268, 0xcdd87830, 1, 0xcdd866a0, 0x2303268)
                                               = 0
gettimeofday(0xcdd87848, NULL)
                                               = 0
pthread_mutex_lock(0x2303268, 1, 435628, 0, 0x2303268)
                                               = 0
pthread_mutex_unlock(0x2303268, 1, 0xcdd87830, 0xcdd87830, 0x2303268)
                                               = 0
pthread_mutex_lock(0x2303268, 0xcdd889c0, 1, 0x4f2be088, 0)
                                               = 0
pthread_mutex_unlock(0x2303268, 0xcdd889c0, 1, 0xcdd87830, 0x2303268)
                                               = 0
...

Currently, I've reduced the problem to the merging of two files:

$ ra -n -r 1_40.argus | wc -l
959586
$ ra -n -r 41_50.argus | wc -l
399927

Doing

$ racluster -r 1_40.argus -r 41_50.argus -w 1_50.argus

produces the behavior described above, and I have to kill racluster
with "kill -9".

Any help appreciated, thanks.

Marco | 7 Feb 10:44
Picon

Re: Huge argus files and racluster

2012/2/7 Marco <listaddr <at> gmail.com>:
> Hi, is there any limit on the size an argus file can have? I'm trying
> to synthesize about 50GB of pcap data into argus data.

Forgot to add:

Argus server and clients are version 3.0.4.1. The size of the two
files I mentioned before:

$ ls -l 1_40.argus 41_50.argus
-rw-r--r-- 1 marco marco 1296408844 Feb  7 10:01 1_40.argus
-rw-r--r-- 1 marco marco  477062088 Feb  7 09:56 41_50.argus

Thanks

Carter Bullard | 7 Feb 15:23

Re: Huge argus files and racluster

Hey Marco,
No limit in size, other than a default racluster.1 will consume all your RAM and
start swapping, which is what looks to be the issue.  You are tracking too many flows
for the memory available on your machine.

You should take the huge files that you have and split them into more
manageable files using rasplit.1.

   rasplit -r 1_40.argus 41_50.argus -M time 5m -w split/%Y/%m/%d/argus.%Y.%m.%d.%H.%M.%S

This will split the data into daily directories, with a file for each 5 minutes in the day.
Then have racluster.1 process these individual files.  The "-M ind" is really important,
without that, you not be doing anything different.

   racluster -R split -M ind replace

This will replace the files you have in the daily archive with aggregated files.
You can then merge the files back into a single file if you like:

   ra -R split -w all.the.argus.data

Carter



On Feb 7, 2012, at 4:33 AM, Marco wrote:

Hi, is there any limit on the size an argus file can have? I'm trying
to synthesize about 50GB of pcap data into argus data.
Doing a plain "argus -r hugefile.pcap -w argusdata.argus" works and
produces a 8GB argus file, but then if I try to run racluster on it to
reduce it further, it just seems to hang after a while.

I did some experiment, and I tried creating multiple argus files and
merge tem in successive iteration, but the final merge always fails.
When I say "fails", I mean that it looks like racluster is working up
to a point (ie, disk activity, strace shows it's reading data), but
from a certain point on, it just appears to be hung. Strace, shows
nothing, ltrace shows lots of stuff like

gettimeofday(0xcdd866b8, NULL)
                                              = 0
pthread_mutex_lock(0x2303268, 1, 435251, 0, 0x2303268)
                                              = 0
pthread_mutex_unlock(0x2303268, 1, 0xcdd866a0, 0xcdd866a0, 0x2303268)
                                              = 0
pthread_mutex_lock(0x2303268, 0xcdd87830, 1, 0x4f2be088, 0)
                                              = 0
pthread_mutex_unlock(0x2303268, 0xcdd87830, 1, 0xcdd866a0, 0x2303268)
                                              = 0
gettimeofday(0xcdd87848, NULL)
                                              = 0
pthread_mutex_lock(0x2303268, 1, 435628, 0, 0x2303268)
                                              = 0
pthread_mutex_unlock(0x2303268, 1, 0xcdd87830, 0xcdd87830, 0x2303268)
                                              = 0
pthread_mutex_lock(0x2303268, 0xcdd889c0, 1, 0x4f2be088, 0)
                                              = 0
pthread_mutex_unlock(0x2303268, 0xcdd889c0, 1, 0xcdd87830, 0x2303268)
                                              = 0
...

Currently, I've reduced the problem to the merging of two files:

$ ra -n -r 1_40.argus | wc -l
959586
$ ra -n -r 41_50.argus | wc -l
399927

Doing

$ racluster -r 1_40.argus -r 41_50.argus -w 1_50.argus

produces the behavior described above, and I have to kill racluster
with "kill -9".

Any help appreciated, thanks.

Attachment (smime.p7s): application/pkcs7-signature, 4367 bytes
Marco | 7 Feb 15:45
Picon

Re: Huge argus files and racluster

2012/2/7 Carter Bullard <carter <at> qosient.com>:
> Hey Marco,
> No limit in size, other than a default racluster.1 will consume all your RAM
> and
> start swapping, which is what looks to be the issue.  You are tracking too
> many flows
> for the memory available on your machine.
>
> You should take the huge files that you have and split them into more
> manageable files using rasplit.1.
>
>    rasplit -r 1_40.argus 41_50.argus -M time 5m -w
> split/%Y/%m/%d/argus.%Y.%m.%d.%H.%M.%S
>
> This will split the data into daily directories, with a file for each 5
> minutes in the day.
> Then have racluster.1 process these individual files.  The "-M ind" is
> really important,
> without that, you not be doing anything different.
>
>    racluster -R split -M ind replace
>
> This will replace the files you have in the daily archive with aggregated
> files.
> You can then merge the files back into a single file if you like:
>
>    ra -R split -w all.the.argus.data

Thanks. But what about long-lived flows that last more than 5 minutes?
Will they be merged or will they appear once per 5-minute file in the
result? The whole point of clustering is having a single entry for
each of them, AFAIK.

elof2 | 7 Feb 16:54
Picon
Favicon

Re: Detect packet drops

On Thu, 2 Feb 2012, Peter Van Epp wrote:
>>> The duplicates,
>>> such as multiple copies of the exact same packet, is detectable and I put code in to do
>>> this, although I don't have any packet files that have the conditions that you describe to
>>> verify if they are correct or not, so I haven't finished the support.
>
> 	As doing this properly is likely to be a performance hog at high link
> speeds it may be that argus isn't the right place to do it. In theory given
> proper change control (which I well know isn't a given :-)) this should be
> only a problem when a switch configuration change is made by the network folks.
> I suspect the correct answer is a standalone libpcap application that checks
> for this error (multiple copies of an identical packet) on the monitored link
> and flags it. At high line speeds it too will have performance problems (it
> is very expensive in memory bandwidth to compare two packets) but since thats
> all its doing its impact can be less. It also should be a persistant thing
> so checking once an hour or once a day may be enough to detect the condition
> and correct it.

You are quite correct.

I already got tcpdump, tshark and ngrep, so another tool for just 
measuring duplicates as well as detecting gaps would be sufficient for me, 
since I could perform spot tests every now and then instead of wasting cpu 
resources in argus.
The problem is just that no such tool seem to exist. :-(

Detecting duplicates is easy without any additional tool besides tcpdump 
or tshark:
Just look for two simillar rows directly after eachother. By adding 
verbosity to the output you can be sure that the second packet is really a 
duplicate and not a retransmission by comparing the IP-id. By comparing 
the TTL-value and MAC-addresses you can rule out packets that look 
simillar but are in fact sniffed before and after a router hop.

So the problem is really just the gap detection.

Ideally I'd like a commandline tool that print a '#' every time it 
detects a gap.

/Elof


Gmane