13c602fabSXin LI# tcpdump 23c602fabSXin LI 33c602fabSXin LI[](https://travis-ci.org/the-tcpdump-group/tcpdump) 53c602fabSXin LI 6*0bff6a5aSEd MasteTo report a security issue please send an e-mail to security@tcpdump.org. 7*0bff6a5aSEd Maste 8*0bff6a5aSEd MasteTo report bugs and other problems, contribute patches, request a 9*0bff6a5aSEd Mastefeature, provide generic feedback etc please see the file 10*0bff6a5aSEd MasteCONTRIBUTING in the tcpdump source tree root. 11*0bff6a5aSEd Maste 123c602fabSXin LITCPDUMP 4.x.y 133c602fabSXin LINow maintained by "The Tcpdump Group" 143c602fabSXin LISee www.tcpdump.org 153c602fabSXin LI 163c602fabSXin LIAnonymous Git is available via: 173c602fabSXin LI 183c602fabSXin LI git clone git://bpf.tcpdump.org/tcpdump 193c602fabSXin LI 203c602fabSXin LIformerly from Lawrence Berkeley National Laboratory 213c602fabSXin LI Network Research Group <tcpdump@ee.lbl.gov> 223c602fabSXin LI ftp://ftp.ee.lbl.gov/old/tcpdump.tar.Z (3.4) 233c602fabSXin LI 243c602fabSXin LIThis directory contains source code for tcpdump, a tool for network 253c602fabSXin LImonitoring and data acquisition. This software was originally 263c602fabSXin LIdeveloped by the Network Research Group at the Lawrence Berkeley 273c602fabSXin LINational Laboratory. The original distribution is available via 283c602fabSXin LIanonymous ftp to `ftp.ee.lbl.gov`, in `tcpdump.tar.Z`. More recent 293c602fabSXin LIdevelopment is performed at tcpdump.org, http://www.tcpdump.org/ 303c602fabSXin LI 313c602fabSXin LITcpdump uses libpcap, a system-independent interface for user-level 323c602fabSXin LIpacket capture. Before building tcpdump, you must first retrieve and 333c602fabSXin LIbuild libpcap, also originally from LBL and now being maintained by 343c602fabSXin LItcpdump.org; see http://www.tcpdump.org/ . 353c602fabSXin LI 363c602fabSXin LIOnce libpcap is built (either install it or make sure it's in 373c602fabSXin LI`../libpcap`), you can build tcpdump using the procedure in the `INSTALL.txt` 383c602fabSXin LIfile. 393c602fabSXin LI 403c602fabSXin LIThe program is loosely based on SMI's "etherfind" although none of the 413c602fabSXin LIetherfind code remains. It was originally written by Van Jacobson as 423c602fabSXin LIpart of an ongoing research project to investigate and improve tcp and 433c602fabSXin LIinternet gateway performance. The parts of the program originally 443c602fabSXin LItaken from Sun's etherfind were later re-written by Steven McCanne of 453c602fabSXin LILBL. To insure that there would be no vestige of proprietary code in 463c602fabSXin LItcpdump, Steve wrote these pieces from the specification given by the 473c602fabSXin LImanual entry, with no access to the source of tcpdump or etherfind. 483c602fabSXin LI 493c602fabSXin LIOver the past few years, tcpdump has been steadily improved by the 503c602fabSXin LIexcellent contributions from the Internet community (just browse 513c602fabSXin LIthrough the `CHANGES` file). We are grateful for all the input. 523c602fabSXin LI 533c602fabSXin LIRichard Stevens gives an excellent treatment of the Internet protocols 543c602fabSXin LIin his book *"TCP/IP Illustrated, Volume 1"*. If you want to learn more 553c602fabSXin LIabout tcpdump and how to interpret its output, pick up this book. 563c602fabSXin LI 573c602fabSXin LISome tools for viewing and analyzing tcpdump trace files are available 583c602fabSXin LIfrom the Internet Traffic Archive: 593c602fabSXin LI 603c602fabSXin LI* http://www.sigcomm.org/ITA/ 613c602fabSXin LI 623c602fabSXin LIAnother tool that tcpdump users might find useful is tcpslice: 633c602fabSXin LI 643c602fabSXin LI* https://github.com/the-tcpdump-group/tcpslice 653c602fabSXin LI 663c602fabSXin LIIt is a program that can be used to extract portions of tcpdump binary 673c602fabSXin LItrace files. See the above distribution for further details and 683c602fabSXin LIdocumentation. 693c602fabSXin LI 703c602fabSXin LICurrent versions can be found at www.tcpdump.org. 713c602fabSXin LI 723c602fabSXin LI - The TCPdump team 733c602fabSXin LI 743c602fabSXin LIoriginal text by: Steve McCanne, Craig Leres, Van Jacobson 753c602fabSXin LI 763c602fabSXin LI------------------------------------- 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