1*ee67461eSJoseph Mingrone# TCPDUMP 4.x.y by [The Tcpdump Group](https://www.tcpdump.org/) 23c602fabSXin LI 3*ee67461eSJoseph Mingrone**To report a security issue please send an e-mail to security@tcpdump.org.** 40bff6a5aSEd Maste 50bff6a5aSEd MasteTo report bugs and other problems, contribute patches, request a 6*ee67461eSJoseph Mingronefeature, provide generic feedback etc please see the 7*ee67461eSJoseph Mingrone[guidelines for contributing](CONTRIBUTING.md) in the tcpdump source tree root. 80bff6a5aSEd Maste 9*ee67461eSJoseph MingroneAnonymous Git is available via 103c602fabSXin LI 11*ee67461eSJoseph Mingrone https://github.com/the-tcpdump-group/tcpdump.git 123c602fabSXin LI 133c602fabSXin LIThis directory contains source code for tcpdump, a tool for network 14*ee67461eSJoseph Mingronemonitoring and data acquisition. 153c602fabSXin LI 16*ee67461eSJoseph MingroneOver the past few years, tcpdump has been steadily improved by the 17*ee67461eSJoseph Mingroneexcellent contributions from the Internet community (just browse 18*ee67461eSJoseph Mingronethrough the [change log](CHANGES)). We are grateful for all the input. 19*ee67461eSJoseph Mingrone 20*ee67461eSJoseph Mingrone### Supported platforms 21*ee67461eSJoseph MingroneIn many operating systems tcpdump is available as a native package or port, 22*ee67461eSJoseph Mingronewhich simplifies installation of updates and long-term maintenance. However, 23*ee67461eSJoseph Mingronethe native packages are sometimes a few versions behind and to try a more 24*ee67461eSJoseph Mingronerecent snapshot it will take to compile tcpdump from the source code. 25*ee67461eSJoseph Mingrone 26*ee67461eSJoseph Mingronetcpdump compiles and works on at least the following platforms: 27*ee67461eSJoseph Mingrone 28*ee67461eSJoseph Mingrone* AIX 29*ee67461eSJoseph Mingrone* DragonFly BSD 30*ee67461eSJoseph Mingrone* FreeBSD 31*ee67461eSJoseph Mingrone* Haiku 32*ee67461eSJoseph Mingrone* HP-UX 11i 33*ee67461eSJoseph Mingrone* illumos (OmniOS, OpenIndiana) 34*ee67461eSJoseph Mingrone* GNU/Linux 35*ee67461eSJoseph Mingrone* {Mac} OS X / macOS 36*ee67461eSJoseph Mingrone* NetBSD 37*ee67461eSJoseph Mingrone* OpenBSD 38*ee67461eSJoseph Mingrone* OpenWrt 39*ee67461eSJoseph Mingrone* Solaris 40*ee67461eSJoseph Mingrone* Windows (requires WinPcap or Npcap, and Visual Studio with CMake) 41*ee67461eSJoseph Mingrone 42*ee67461eSJoseph Mingrone### Dependency on libpcap 433c602fabSXin LITcpdump uses libpcap, a system-independent interface for user-level 443c602fabSXin LIpacket capture. Before building tcpdump, you must first retrieve and 45*ee67461eSJoseph Mingronebuild libpcap. 463c602fabSXin LI 473c602fabSXin LIOnce libpcap is built (either install it or make sure it's in 48*ee67461eSJoseph Mingrone`../libpcap`), you can build tcpdump using the procedure in the 49*ee67461eSJoseph Mingrone[installation notes](INSTALL.md). 503c602fabSXin LI 51*ee67461eSJoseph Mingrone### Origins of tcpdump 523c602fabSXin LIThe program is loosely based on SMI's "etherfind" although none of the 533c602fabSXin LIetherfind code remains. It was originally written by Van Jacobson as 54*ee67461eSJoseph Mingronepart of an ongoing research project to investigate and improve TCP and 55*ee67461eSJoseph MingroneInternet gateway performance. The parts of the program originally 563c602fabSXin LItaken from Sun's etherfind were later re-written by Steven McCanne of 573c602fabSXin LILBL. To insure that there would be no vestige of proprietary code in 583c602fabSXin LItcpdump, Steve wrote these pieces from the specification given by the 593c602fabSXin LImanual entry, with no access to the source of tcpdump or etherfind. 60*ee67461eSJoseph Mingrone```text 61*ee67461eSJoseph Mingroneformerly from Lawrence Berkeley National Laboratory 62*ee67461eSJoseph Mingrone Network Research Group <tcpdump@ee.lbl.gov> 63*ee67461eSJoseph Mingrone ftp://ftp.ee.lbl.gov/old/tcpdump.tar.Z (3.4) 64*ee67461eSJoseph Mingrone``` 653c602fabSXin LI 66*ee67461eSJoseph Mingrone### See also 673c602fabSXin LIRichard Stevens gives an excellent treatment of the Internet protocols 683c602fabSXin LIin his book *"TCP/IP Illustrated, Volume 1"*. If you want to learn more 693c602fabSXin LIabout tcpdump and how to interpret its output, pick up this book. 703c602fabSXin LI 71*ee67461eSJoseph MingroneAnother tool that tcpdump users might find useful is 72*ee67461eSJoseph Mingrone[tcpslice](https://github.com/the-tcpdump-group/tcpslice). 733c602fabSXin LIIt is a program that can be used to extract portions of tcpdump binary 74*ee67461eSJoseph Mingronetrace files. 753c602fabSXin LI 76*ee67461eSJoseph Mingrone### The original LBL README by Steve McCanne, Craig Leres and Van Jacobson 773c602fabSXin LI``` 783c602fabSXin LIThis directory also contains some short awk programs intended as 793c602fabSXin LIexamples of ways to reduce tcpdump data when you're tracking 803c602fabSXin LIparticular network problems: 813c602fabSXin LI 823c602fabSXin LIsend-ack.awk 833c602fabSXin LI Simplifies the tcpdump trace for an ftp (or other unidirectional 843c602fabSXin LI tcp transfer). Since we assume that one host only sends and 853c602fabSXin LI the other only acks, all address information is left off and 863c602fabSXin LI we just note if the packet is a "send" or an "ack". 873c602fabSXin LI 883c602fabSXin LI There is one output line per line of the original trace. 893c602fabSXin LI Field 1 is the packet time in decimal seconds, relative 903c602fabSXin LI to the start of the conversation. Field 2 is delta-time 913c602fabSXin LI from last packet. Field 3 is packet type/direction. 923c602fabSXin LI "Send" means data going from sender to receiver, "ack" 933c602fabSXin LI means an ack going from the receiver to the sender. A 943c602fabSXin LI preceding "*" indicates that the data is a retransmission. 953c602fabSXin LI A preceding "-" indicates a hole in the sequence space 963c602fabSXin LI (i.e., missing packet(s)), a "#" means an odd-size (not max 973c602fabSXin LI seg size) packet. Field 4 has the packet flags 983c602fabSXin LI (same format as raw trace). Field 5 is the sequence 993c602fabSXin LI number (start seq. num for sender, next expected seq number 1003c602fabSXin LI for acks). The number in parens following an ack is 1013c602fabSXin LI the delta-time from the first send of the packet to the 1023c602fabSXin LI ack. A number in parens following a send is the 1033c602fabSXin LI delta-time from the first send of the packet to the 1043c602fabSXin LI current send (on duplicate packets only). Duplicate 1053c602fabSXin LI sends or acks have a number in square brackets showing 1063c602fabSXin LI the number of duplicates so far. 1073c602fabSXin LI 1083c602fabSXin LI Here is a short sample from near the start of an ftp: 1093c602fabSXin LI 3.00 0.20 send . 512 1103c602fabSXin LI 3.20 0.20 ack . 1024 (0.20) 1113c602fabSXin LI 3.20 0.00 send P 1024 1123c602fabSXin LI 3.40 0.20 ack . 1536 (0.20) 1133c602fabSXin LI 3.80 0.40 * send . 0 (3.80) [2] 1143c602fabSXin LI 3.82 0.02 * ack . 1536 (0.62) [2] 1153c602fabSXin LI Three seconds into the conversation, bytes 512 through 1023 1163c602fabSXin LI were sent. 200ms later they were acked. Shortly thereafter 1173c602fabSXin LI bytes 1024-1535 were sent and again acked after 200ms. 1183c602fabSXin LI Then, for no apparent reason, 0-511 is retransmitted, 3.8 1193c602fabSXin LI seconds after its initial send (the round trip time for this 1203c602fabSXin LI ftp was 1sec, +-500ms). Since the receiver is expecting 1213c602fabSXin LI 1536, 1536 is re-acked when 0 arrives. 1223c602fabSXin LI 1233c602fabSXin LIpacketdat.awk 1243c602fabSXin LI Computes chunk summary data for an ftp (or similar 1253c602fabSXin LI unidirectional tcp transfer). [A "chunk" refers to 1263c602fabSXin LI a chunk of the sequence space -- essentially the packet 1273c602fabSXin LI sequence number divided by the max segment size.] 1283c602fabSXin LI 1293c602fabSXin LI A summary line is printed showing the number of chunks, 1303c602fabSXin LI the number of packets it took to send that many chunks 1313c602fabSXin LI (if there are no lost or duplicated packets, the number 1323c602fabSXin LI of packets should equal the number of chunks) and the 1333c602fabSXin LI number of acks. 1343c602fabSXin LI 1353c602fabSXin LI Following the summary line is one line of information 1363c602fabSXin LI per chunk. The line contains eight fields: 1373c602fabSXin LI 1 - the chunk number 1383c602fabSXin LI 2 - the start sequence number for this chunk 1393c602fabSXin LI 3 - time of first send 1403c602fabSXin LI 4 - time of last send 1413c602fabSXin LI 5 - time of first ack 1423c602fabSXin LI 6 - time of last ack 1433c602fabSXin LI 7 - number of times chunk was sent 1443c602fabSXin LI 8 - number of times chunk was acked 1453c602fabSXin LI (all times are in decimal seconds, relative to the start 1463c602fabSXin LI of the conversation.) 1473c602fabSXin LI 1483c602fabSXin LI As an example, here is the first part of the output for 1493c602fabSXin LI an ftp trace: 1503c602fabSXin LI 1513c602fabSXin LI # 134 chunks. 536 packets sent. 508 acks. 1523c602fabSXin LI 1 1 0.00 5.80 0.20 0.20 4 1 1533c602fabSXin LI 2 513 0.28 6.20 0.40 0.40 4 1 1543c602fabSXin LI 3 1025 1.16 6.32 1.20 1.20 4 1 1553c602fabSXin LI 4 1561 1.86 15.00 2.00 2.00 6 1 1563c602fabSXin LI 5 2049 2.16 15.44 2.20 2.20 5 1 1573c602fabSXin LI 6 2585 2.64 16.44 2.80 2.80 5 1 1583c602fabSXin LI 7 3073 3.00 16.66 3.20 3.20 4 1 1593c602fabSXin LI 8 3609 3.20 17.24 3.40 5.82 4 11 1603c602fabSXin LI 9 4097 6.02 6.58 6.20 6.80 2 5 1613c602fabSXin LI 1623c602fabSXin LI This says that 134 chunks were transferred (about 70K 1633c602fabSXin LI since the average packet size was 512 bytes). It took 1643c602fabSXin LI 536 packets to transfer the data (i.e., on the average 1653c602fabSXin LI each chunk was transmitted four times). Looking at, 1663c602fabSXin LI say, chunk 4, we see it represents the 512 bytes of 1673c602fabSXin LI sequence space from 1561 to 2048. It was first sent 1683c602fabSXin LI 1.86 seconds into the conversation. It was last 1693c602fabSXin LI sent 15 seconds into the conversation and was sent 1703c602fabSXin LI a total of 6 times (i.e., it was retransmitted every 1713c602fabSXin LI 2 seconds on the average). It was acked once, 140ms 1723c602fabSXin LI after it first arrived. 1733c602fabSXin LI 1743c602fabSXin LIstime.awk 1753c602fabSXin LIatime.awk 1763c602fabSXin LI Output one line per send or ack, respectively, in the form 1773c602fabSXin LI <time> <seq. number> 1783c602fabSXin LI where <time> is the time in seconds since the start of the 1793c602fabSXin LI transfer and <seq. number> is the sequence number being sent 1803c602fabSXin LI or acked. I typically plot this data looking for suspicious 1813c602fabSXin LI patterns. 1823c602fabSXin LI 1833c602fabSXin LI 1843c602fabSXin LIThe problem I was looking at was the bulk-data-transfer 1853c602fabSXin LIthroughput of medium delay network paths (1-6 sec. round trip 1863c602fabSXin LItime) under typical DARPA Internet conditions. The trace of the 1873c602fabSXin LIftp transfer of a large file was used as the raw data source. 1883c602fabSXin LIThe method was: 1893c602fabSXin LI 1903c602fabSXin LI - On a local host (but not the Sun running tcpdump), connect to 1913c602fabSXin LI the remote ftp. 1923c602fabSXin LI 1933c602fabSXin LI - On the monitor Sun, start the trace going. E.g., 1943c602fabSXin LI tcpdump host local-host and remote-host and port ftp-data >tracefile 1953c602fabSXin LI 1963c602fabSXin LI - On local, do either a get or put of a large file (~500KB), 1973c602fabSXin LI preferably to the null device (to minimize effects like 1983c602fabSXin LI closing the receive window while waiting for a disk write). 1993c602fabSXin LI 2003c602fabSXin LI - When transfer is finished, stop tcpdump. Use awk to make up 2013c602fabSXin LI two files of summary data (maxsize is the maximum packet size, 2023c602fabSXin LI tracedata is the file of tcpdump tracedata): 2033c602fabSXin LI awk -f send-ack.awk packetsize=avgsize tracedata >sa 2043c602fabSXin LI awk -f packetdat.awk packetsize=avgsize tracedata >pd 2053c602fabSXin LI 2063c602fabSXin LI - While the summary data files are printing, take a look at 2073c602fabSXin LI how the transfer behaved: 2083c602fabSXin LI awk -f stime.awk tracedata | xgraph 2093c602fabSXin LI (90% of what you learn seems to happen in this step). 2103c602fabSXin LI 2113c602fabSXin LI - Do all of the above steps several times, both directions, 2123c602fabSXin LI at different times of day, with different protocol 2133c602fabSXin LI implementations on the other end. 2143c602fabSXin LI 2153c602fabSXin LI - Using one of the Unix data analysis packages (in my case, 2163c602fabSXin LI S and Gary Perlman's Unix|Stat), spend a few months staring 2173c602fabSXin LI at the data. 2183c602fabSXin LI 2193c602fabSXin LI - Change something in the local protocol implementation and 2203c602fabSXin LI redo the steps above. 2213c602fabSXin LI 2223c602fabSXin LI - Once a week, tell your funding agent that you're discovering 2233c602fabSXin LI wonderful things and you'll write up that research report 2243c602fabSXin LI "real soon now". 2253c602fabSXin LI``` 226