packages icon

by Jeremy Elson <>

For the latest information on tcpflow, please see:

Or, subscribe to the tcpflow mailing lists; see

== What is tcpflow?

tcpflow is a program that captures data transmitted as part of TCP
connections (flows), and stores the data in a way that is convenient
for protocol analysis or debugging.  A program like 'tcpdump' shows a
summary of packets seen on the wire, but usually doesn't store the
data that's actually being transmitted.  In contrast, tcpflow
reconstructs the actual data streams and stores each flow in a
separate file for later analysis.

tcpflow understands sequence numbers and will correctly reconstruct
data streams regardless of retransmissions or out-of-order delivery.
However, it currently does not understand IP fragments; flows
containing IP fragments will not be recorded properly.

tcpflow is based on the LBL Packet Capture Library (available at and therefore supports the same
rich filtering expressions that programs like 'tcpdump' support.
It should compile under most popular versions of UNIX; see the INSTALL
file for details.

tcpflow stores all captured data in files that have names of the form


where the contents of the above file would be data transmitted from
host port 2345, to host port 45103.

== What use is it?

I originally wrote this program to capture the data being sent by
various programs that use undocumented network protocols in an attempt
to reverse engineer those protocols.  RealPlayer (and most other
streaming media players), ICQ, and AOL IM are good examples of this
type of application.

In tinkering with it, I later also found tcpflow to be useful for
checking to see what cookies my browser was sending to various sites,
looking at the MIME headers of HTTP requests people are sending to my
web server, and verifying that various connections to my machine that
were supposed to be encrypted actually *were* encrypted.

== Security Implications

Although I wrote tcpflow to help the Forces of Good, in the wrong
hands it can certainly be used for the Forces of Evil.  In the wrong
hands this program can be used to do things like read incoming and
outgoing mail, and sniff passwords.  I have chosen to release it
anyway, because crackers already have tools specifically optimized for
doing "evil" network sniffing easily, and this program will most
likely not make their lives any easier.

Theoretically, the Good Guys might be able to use programs like this
to monitor their networks for evidence of attacks.  Such Good Guys are
directed to software such as Vern Paxson's Bro
<>, which is
specifically designed to do network-based intrusion detection.  Also,
you should be aware that there are certain problems that make network
intrusion detectors inherently unreliable in the face of a
sufficiently advanced attacker; for more information, see  or .

== Bugs

Please send bug reports to

tcpflow currently does not understand IP fragments.  Flows containing
IP fragments will not be recorded correctly.

tcpflow never frees state associated with flows that it records, so
will grow large if used to capture a very large number of flows (e.g.,
on the order of 100,000 flows or more).

There appears to be a bug in the way that Linux delivers packets to
libpcap when using the loopback interface ("localhost").  When
listening to the Linux loopback interface, selective packet filtering
is not possible; all TCP flows on the localhost interface will be

Jeremy Elson