aboutsummaryrefslogtreecommitdiffstats
path: root/doc/ethereal.pod.template
blob: ee19773e04db16f6df5409998e09dfb7fa15196c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
=head1 NAME

Ethereal - Interactively browse network traffic

=head1 SYNOPSYS

B<ethereal>
S<[ B<-B> byte view height ]>
S<[ B<-c> count ]>
S<[ B<-f> filter expression ]>
S<[ B<-h> ]>
S<[ B<-i> interface ]> 
S<[ B<-k> ]>
S<[ B<-m> font ]>
S<[ B<-n> ]>
S<[ B<-o> preference setting ] ...>
S<[ B<-p> ]>
S<[ B<-P> packet list height ]>
S<[ B<-Q> ]>
S<[ B<-r> infile ]>
S<[ B<-R> filter expression ]>
S<[ B<-S> ]>
S<[ B<-s> snaplen ]>
S<[ B<-T> tree view height ]>
S<[ B<-t> time stamp format ]>
S<[ B<-v> ]>
S<[ B<-w> savefile]>

=head1 DESCRIPTION

B<Ethereal> is a GUI network protocol analyzer.  It lets you
interactively browse packet data from a live network or from a
previously saved capture file.  B<Ethereal> knows how to read B<libpcap>
capture files, including those of B<tcpdump>.  In addition, B<Ethereal>
can read capture files from B<snoop> (including B<Shomiti>) and
B<atmsnoop>, B<LanAlyzer>, B<Sniffer> (compressed or uncompressed),
Microsoft B<Network Monitor>, AIX's B<iptrace>, B<NetXray>, B<Sniffer
Pro>, B<RADCOM>'s WAN/LAN analyzer, B<Lucent/Ascend> router debug
output, HP-UX's B<nettl>, the dump output from B<Toshiba's> ISDN
routers, the output from B<i4btrace> from the ISDN4BSD project, and
output in IPLog format from the Cisco Secure Intrusion Detection System.
There is no need to tell B<Ethereal> what type of file you are reading;
it will determine the file type by itself.  B<Ethereal> is also capable
of reading any of these file formats if they are compressed using gzip. 
B<Ethereal> recognizes this directly from the file; the '.gz' extension
is not required for this purpose.

Like other protocol analyzers, B<Ethereal>'s main window shows 3 views
of a packet.  It shows a summary line, briefly describing what the
packet is.  A protocol tree is shown, allowing you to drill down to
exact protocol or field that you interested in.  Finally, a hex dump
shows you exactly what the packet looks like when it goes over the wire.

In addition, B<Ethereal> has some features that make it unique.  It can
assemble all the packets in a TCP conversation and show you the ASCII
(or EBCDIC, or hex) data in that conversation.  Display filters in
B<Ethereal> are very powerful; more fields are filterable in B<Ethereal>
than in other protocol analyzers, and the syntax you can use to create
your filters is richer.  As B<Ethereal> progresses, expect more and more
protocol fields to be allowed in display filters.

Packet capturing is performed with the pcap library.  The capture filter
syntax follows the rules of the pcap library.  This syntax is different
from the display filter syntax.

Compressed file support uses (and therefore requires) the zlib library. 
If the zlib library is not present, B<Ethereal> will compile, but will
be unable to read compressed files.

=head1 OPTIONS

=over 4

=item -B

Sets the initial height of the byte view (bottom) pane.

=item -c

Sets the default number of packets to read when capturing live
data.

=item -f

Sets the capture filter expression.

=item -h

Prints the version and options and exits.

=item -i

Sets the name of the network interface or pipe to use for live packet capture.
Network interface names should match one of the names listed in "B<netstat -i>"
or "B<ifconfig -a>".
Pipe names should be either the name of a FIFO (named pipe) or ``-'' to read
data from the standard input. Data read from pipes must be in libpcap format.

=item -k

Starts the capture session immediately.  If the B<-i> flag was
specified, the capture uses the specified interface.  Otherwise,
B<Ethereal> searches the list of interfaces, choosing the first
non-loopback interface if there are any non-loopback interfaces, and
choosing the first loopback interface if there are no non-loopback
interfaces; if there are no interfaces, B<Ethereal> reports an error and
doesn't start the capture.

=item -m

Sets the name of the font used by B<Ethereal> for most text. 
B<Ethereal> will construct the name of the bold font used for the data
in the byte view pane that corresponds to the field selected in the
protocol tree pane from the name of the main text font.

=item -n

Disables network object name resolution (such as hostname, TCP and UDP port
names).

=item -o

Sets a preference value, overriding the default value and any value read
from a preference file.  The argument to the flag is a string of the
form I<prefname>B<:>I<value>, where I<prefname> is the name of the
preference (which is the same name that would appear in the preference
file), and I<value> is the value to which it should be set.

=item -p

I<Don't> put the interface into promiscuous mode.  Note that the
interface might be in promiscuous mode for some other reason; hence,
B<-p> cannot be used to ensure that the only traffic that is captured is
traffic sent to or from the machine on which B<Ethereal> is running,
broadcast traffic, and multicast traffic to addresses received by that
machine.

=item -P

Sets the initial height of the packet list (top) pane.

=item -Q

Causes B<Ethereal> to exit after the end of capture session (useful in
batch mode with B<-c> option for instance); this option requires the
B<-i> and B<-w> parameters.

=item -r

Reads packet data from I<file>.

=item -R

When reading a capture file specified with the B<-r> flag, causes the
specified filter (which uses the syntax of display filters, rather than
that of capture filters) to be applied to all packets read from the
capture file; packets not matching the filter are discarded.

=item -S

Specifies that the live packet capture will be performed in a separate
process, and that the packet display will automatically be updated as
packets are seen.

=item -s

Sets the default snapshot length to use when capturing live data. 
No more than I<snaplen> bytes of each network packet will be read into
memory, or saved to disk.

=item -T

Sets the initial height of the tree view (middle) pane.

=item -t

Sets the format of the packet timestamp displayed in the packet list
window.  The format can be one of 'r' (relative), 'a' (absolute), or 'd'
(delta).  The relative time is the time elapsed between the first packet
and the current packet.  The absolute time is the actual date and time the
packet was captured.  The delta time is the time since the previous packet
was captured.  The default is relative.

=item -v

Prints the version and exits.

=item -w

Sets the default capture file name.

=back

=head1 INTERFACE

=head2 MENU ITEMS

=over 4

=item File:Open, File:Close, File:Reload

Open, close, or reload a capture file.  The I<File:Open> dialog box
allows a filter to be specified; when the capture file is read, the
filter is applied to all packets read from the file, and packets not
matching the filter are discarded.

=item File:Save, File:Save As

Save the current capture, or the packets currently displayed from that
capture, to a file.  Check boxes let you select whether to save all
packets, or just those that have passed the current display filter and/or
those that are currently marked, and an option menu lets you select (from 
a list of file formats in which at particular capture, or the packets 
currently displayed from that capture, can be saved), a file format in 
which to save it.

=item File:Print

Prints, for all the packets in the current capture, either the summary
line for the packet or the protocol tree view of the packet; when
printing the protocol tree view, the hex dump of the packet can be
printed as well.  Printing options can be set with the
I<Edit:Preferences> menu item, or in the dialog box popped up by this
item.

=item File:Print Packet

Print a fully-expanded protocol tree view of the currently-selected
packet.  Printing options can be set with the I<Edit:Preferences> menu
item.

=item File:Quit

Exits the application.

=item Edit:Find Frame

Allows you to search forward or backward, starting with the currently
selected packet (or the most recently selected packet, if no packet is
selected), for a packet matching a given display filter.

=item Edit:Go To Frame

Allows you to go to a particular numbered packet.

=item Edit:Mark Frame

Allows you to mark (or unmark if currently marked) the selected packet.

=item Edit:Mark All Frames

Allows you to mark all packets that are currently displayed.

=item Edit:Unmark All Frames

Allows you to unmark all packets that are currently displayed.

=item Edit:Preferences

Sets the packet printing, column display, TCP stream coloring, and GUI
options (see L<"Preferences"> below).

=item Edit:Filters

Edits the saved list of filters, allowing filters to be added, changed,
or deleted, and lets a selected filter be applied to the current
capture, if any.

=item Edit:Protocols

Edits the list of protocols, allowing protocol dissection to be 
enabled or disabled.

=item Capture:Start

Initiates a live packet capture (see L<"Capture Preferences"> below).  A
temporary file will be created to hold the capture.  The location of the
file can be chosen by setting your TMPDIR environment variable before
starting B<Ethereal>.  Otherwise, the default TMPDIR location is
system-dependent, but is likely either F</var/tmp> or F</tmp>.

=item Display:Options

Allows you to sets the format of the packet timestamp displayed in the
packet list window to relative, absolute, or delta, to enable or disable
the automatic scrolling of the packet list while a live capture is in
progress or to enable or disable translation of addresses to names in the
display.

=item Display:Match Selected

Creates and applies a display filter based on the data that is currently
highlighted in the protocol tree.  If that data is a field that can be
tested in a display filter expression, the display filter will test that
field; otherwise, the display filter will be based on absolute offset
within the packet, and so could be unreliable if the packet contains
protocols with variable-length headers, such as a source-routed
token-ring packet.

=item Display:Colorize Display

Allows you to change the foreground and background colors of the packet
information in the list of packets, based upon display filters.  The list
of display filters is applied to each packet sequentially. After the first
display filter matches a packet, any additional display filters in the list
are ignored. Therefore, if you are filtering on the existence of protocols,
you should list the higher-level protocols first, and the lower-level
protocols last.

=item Display:Collapse All

Collapses the protocol tree branches.

=item Display:Expand All

Expands all branches of the protocol tree.

=item Display:Expand All

Expands all branches of the protocol tree.

=item Display:Show Packet In New Window

Creates a new window containing a protocol tree view and a hex dump
window of the currently selected packet; this window will continue to
display that packet's protocol tree and data even if another packet is
selected.

=item Tools:Plugins

Allows you to use and configure dynamically loadable modules (see
L<"Plugins"> below).

=item Tools:Follow TCP Stream

If you have a TCP packet selected, it will display the contents of the
data stream for the TCP connection to which that packet belongs, as
text, in a separate window, and will leave the list of packets in a
filtered state, with only those packets that are part of that TCP
connection being displayed.  You can revert to your old view by pressing
ENTER in the display filter text box, thereby invoking your old display
filter (or resetting it back to no display filter).

The window in which the data stream is displayed lets you select whether
to display:

=over 4

=item

whether to display the entire conversation, or one or the other side of
it;

=item

whether the data being displayed is to be treated as ASCII or EBCDIC
text or as raw hex data;

=back

=back

=over 4

=item

and lets you print what's currently being displayed, using the same
print options that are used for the I<File:Print Packet> menu item, or
save it as text to a file.

=back

=head2 WINDOWS

=over 4

=item Main Window

The main window is split into three panes.  You can resize each pane using
a "thumb" at the right end of each divider line.  Below the panes is a
strip that shows the current filter and informational text.

=over 6

=item Top Pane

The top pane contains the list of network packets that you can scroll
through and select.  By default, the packet number, packet timestamp,
source and destination addresses, protocol, and description are
displayed for each packet; the I<Columns> page in the dialog box popped
up by I<Edit:Preferences> lets you change this (although, unfortunately,
you currently have to save the preferences, and exit and restart
Ethereal, for those changes to take effect).

If you click on the heading for a column, the display will be sorted by
that column; clicking on the heading again will reverse the sort order
for that column.

An effort is made to display information as high up the protocol stack
as possible, e.g. IP addresses are displayed for IP packets, but the
MAC layer address is displayed for unknown packet types.

The right mouse button can be used to pop up a menu of operations.

The middle mouse button can be used to mark a packet.

=item Middle Pane

The middle pane contains a I<protocol tree> for the currently-selected
packet.  The tree displays each field and its value in each protocol
header in the stack.  The right mouse button can be used to pop up a
menu of operations.

=item Bottom Pane

The lowest pane contains a hex dump of the actual packet data. 
Selecting a field in the I<protocol tree> highlights the corresponding
bytes in this section.

The right mouse button can be used to pop up a menu of operations.

=item Current Filter

A display filter can be entered into the strip at the bottom. 
A filter for HTTP, HTTPS, and DNS traffic might look like this:

  tcp.port == 80 || tcp.port == 443 || tcp.port == 53

Selecting the I<Filter:> button lets you choose from a list of named
filters that you can optionally save.  Pressing the Return or Enter
keys will cause the filter to be applied to the current list of packets.
Selecting the I<Reset> button clears the display filter so that all
packets are displayed.

=back

=item Preferences

The I<Preferences> dialog lets you control various personal preferences
for the behavior of B<Ethereal>.

=over 6

=item Printing Preferences

The radio buttons at the top of the I<Printing> page allow you choose
between printing packets with the I<File:Print Packet> menu item as text
or PostScript, and sending the output directly to a command or saving it
to a file.  The I<Command:> text entry box is the command to send files
to (usually B<lpr>), and the I<File:> entry box lets you enter the name
of the file you wish to save to.  Additionally, you can select the
I<File:> button to browse the file system for a particular save file.

=item Column Preferences

The I<Columns> page lets you specify the number, title, and format
of each column in the packet list.

The I<Column title> entry is used to specify the title of the column
displayed at the top of the packet list.  The type of data that the column
displays can be specified using the I<Column format> option menu.  The row
of buttons on the left perform the following actions:

=over 6

=item New

Adds a new column to the list.

=item Change

Modifies the currently selected list item.

=item Delete

Deletes the currently selected list item.

=item Up / Down

Moves the selected list item up or down one position.

=item OK

Currently has no effect.

=item Save

Saves the current column format as the default.

=item Cancel

Closes the dialog without making any changes.

=back

=item TCP Stream Preferences

The I<TCP Streams> page can be used to change the color of the text
displayed in the TCP stream window.  To change a color, simply select
an attribute from the "Set:" menu and use the color selector to get the
desired color.  The new text colors are displayed in a sample window.

=item GUI Preferences

The I<GUI> page is used to modify small aspects of the GUI to your own
personal taste:

=over 6

=item Scrollbars

The vertical scrollbars in the three panes can be set to be either on
the left or the right. 

=item Selection Bars

The selection bar in the
packet list and protocol tree can have either a "browse" or "select"
behavior. If the selection bar has a "browse" behavior, the arrow keys
will move an outline of the selection bar, allowing you to browse
the rest of the list or tree without changing the selection
until you press the space bar. If the selection bar has a "select"
behavior, the arrow keys will move the selection bar and change
the selection to the new item in the packet list or protocol tree.
The highlight method in the hex dump display for the selected protocol
item can be set to use either inverse video, or bold characters.

=item Fonts

The "Font..." button lets you select the font to be used for most text.

=item Colors

The "Colors..." button lets you select the colors to be used for instance
for the marked frames.

=back

=item Protocol Preferences

There are also pages for various protocols that Ethereal dissects,
controlling the way Ethereal handles those protocols.

=back

=item Filters

The I<Filters> dialog lets you create and modify filters, and set the
default filter to use when capturing data or opening a capture file.

The I<Filter name> entry specifies a descriptive name for a filter, e.g.
B<Web and DNS traffic>.  The I<Filter string> entry is the text that
actually describes the filtering action to take, as described above.The
dialog buttons perform the following actions:

=over 6

=item New

If there is text in the two entry boxes, it creates a new associated list
item.

=item Change

Modifies the currently selected list item to match what's in the entry
boxes.

=item Copy

Makes a copy of the currently selected list item.

=item Delete

Deletes the currently selected list item.

=item Apply

Sets the currently selected list item as the active filter, and applies
it to the current capture, if any.
(The currently selected list item must be a display filter, not a
capture filter.)  If nothing is selected, turns filtering off.

=item OK

Sets the currently selected list item as the active filter.  If nothing
is selected, turns filtering off.

=item Save

Saves the current filter list in F<$HOME/.ethereal/filters>.

=item Cancel

Closes the dialog without making any changes.

=back

=item Capture Preferences

The I<Capture Preferences> dialog lets you specify various parameters for
capturing live packet data.

The I<Interface:> combo box lets you specify the interface from which to
capture packet data, or the name of a FIFO from which to get the packet
data.  The I<Count:> entry specifies the number of packets to capture. 
Entering 0 will capture packets indefinitely.  The I<Filter:> entry lets
you specify the capture filter using a tcpdump-style filter string as
described above.  The I<File:> entry specifies the file to save to, as
in the I<Printer Options> dialog above.  You can specify the maximum
number of bytes to capture per packet with the I<Capture length> entry,
can specify whether the interface is to be put in promiscuous mode or
not with the I<Capture packets in promiscuous mode> check box, can
specify that the display should be updated as packets are captured with
the I<Update list of packets in real time> check box, can specify
whether in such a capture the packet list pane should scroll to show the
most recently captured packets with the I<Automatic scrolling in live
capture> check box, and can specify whether addresses should be
translated to names in the display with the I<Enable name resolution>
check box.

=item Display Options

The I<Display Options> dialog lets you specify the format of the time stamp
in the packet list.  You can select "Time of day" for absolute time stamps,
"Seconds since beginning of capture" for relative time stamps, or
"Seconds since previous frame" for delta time stamps.  You can also
specify whether, when the display is updated as packets are captured,
the list should automatically scroll to show the most recently captured
packets or not and whether addresses should be translated to names in the
display.

=item Plugins

The I<Plugins> dialog lets you view and configure the plugins available
on your system.

The I<Plugins List> shows the name, description, version and state
(enabled or not) of each plugin found on your system. The plugins are
searched in the following directories: F</usr/share/ethereal/plugins>,
F</usr/local/share/ethereal/plugins> and F<~/.ethereal/plugins>

A plugin must be activated using the I<Enable> button in order to use it
to dissect packets. It can also be deactivated with the I<Disable> button.

The I<Filter> button shows the filter used to select packets which should
be dissected by a plugin (see L<"DISPLAY FILTER SYNTAX"> below). This
filter can be modified.

=head1 CAPTURE FILTER SYNTAX

See manual page of tcpdump(8).

=head1 DISPLAY FILTER SYNTAX

Display filters help you remove the noise from a packet trace and let
you see only the packets that interest you.  If a packet meets the
requirements expressed in your display filter, then it is displayed in
the list of packets.  Display filters let you compare the fields within
a protocol against a specific value, compare fields against fields, and
to check the existence of specified fields or protocols.

The simplest display filter allows you to check for the existence of a
protocol or field.  If you want to see all packets which contain the IPX
protocol, the filter would be "ipx".  (Without the quotation marks) To
see all packets that contain a Token-Ring RIF field, use "tr.rif".

Fields can also be compared against values.  The comparison operators
can be expressed either through C-like symbols, or through English-like
abbreviations:

    eq, ==    Equal
    ne, !=    Not equal
    gt, >     Greater than
    lt, <     Less Than
    ge, >=    Greater than or Equal to
    le, <=    Less than or Equal to

Furthermore, each protocol field is typed. The types are:

    Unsigned integer (either 8-bit, 16-bit, 24-bit, or 32-bit)
    Signed integer (either 8-bit, 16-bit, 24-bit, or 32-bit)
    Boolean
    Ethernet address (6 bytes)
    Byte string (n-number of bytes)
    IPv4 address
    IPv6 address
    IPX network number
    String (text)
    Double-precision floating point number

An integer may be expressed in decimal, octal, or hexadecimal notation. 
The following three display filters are equivalent:

    frame.pkt_len > 10
    frame.pkt_len > 012
    frame.pkt_len > 0xa

Boolean values are either true or false.  However, a boolean field is
present in a protocol decode only if its value is true.  If the value is
false, the field is not presence.  You can therefore check the truth
value of a boolean field by simply checking for its existence, that is,
by naming the field.  For example, a token-ring packet's source route
field is boolean.  To find any source-routed packets, the display filter
is simply:

    tr.sr

Non source-routed packets can be found with the negation of that filter:

    ! tr.sr

Ethernet addresses, as well as a string of bytes, are represented in hex
digits.  The hex digits may be separated by colons, periods, or hyphens:

    fddi.dst eq ff:ff:ff:ff:ff:ff
    ipx.srcnode == 0.0.0.0.0.1
    eth.src == aa-aa-aa-aa-aa-aa

If a string of bytes contains only one byte, then it is represented as
an unsigned integer.  That is, if you are testing for hex value 'ff' in
a one-byte byte-string, you must compare it agains '0xff' and not 'ff'. 

IPv4 addresses can be represented in either dotted decimal notation, or
by using the hostname:

    ip.dst eq www.mit.edu
    ip.src == 192.168.1.1

IPv4 address can be compared with the same logical relations as numbers:
eq, ne, gt, ge, lt, and le.  The IPv4 address is stored in host order,
so you do not have to worry about how the endianness of an IPv4 address
when using it in a display filter.

Classless InterDomain Routing (CIDR) notation can be used to test if an
IPv4 address is in a certain subnet.  For example, this display filter
will find all packets in the 129.111 Class-B network:

    ip.addr == 129.111.0.0/16

Remember, the number after the slash represents the number of bits used
to represent the network.  CIDR notation can also be used with
hostnames, in this example of finding IP addresses on the same Class C
network as 'sneezy':

    ip.addr eq sneezy/24

The CIDR notation can only be used on IP addresses or hostnames, not in
variable names.  So, a display filter like "ip.src/24 == ip.dst/24" is
not valid.  (yet)

IPX networks are represented by unsigned 32-bit integers.  Most likely
you will be using hexadecimal when testing for IPX network values:

    ipx.srcnet == 0xc0a82c00

A substring operator also exists.  You can check the substring
(byte-string) of any protocol or field.  For example, you can filter on
the vendor portion of an ethernet address (the first three bytes) like
this:

    eth.src[0:3] == 00:00:83

Or more simply, since the number of bytes is inherent in the byte-string
you provide, you can provide just the offset.  The previous example can
be stated like this:

    eth.src[0] == 00:00:83

In fact, the only time you need to explicitly provide a length is when
you don't provide a byte-string, and are comparing fields against
fields:

    fddi.src[0:3] == fddi.dst[0:3]

If the length of your byte-string is only one byte, then it must be
represented in the same way as an unsigned 8-bit integer:

    llc[3] == 0xaa

You can use the substring operator on a protocol name, too.  And
remember, the "frame" protocol encompasses the entire packet, allowing
you to look at the nth byte of a packet regardless of its frame type
(Ethernet, token-ring, etc.).

    token[0:5] ne 0.0.0.1.1
    ipx[0:2] == ff:ff
    llc[3:1] eq 0xaa

Offsets for byte-strings can also be negative, in which case the
negative number indicates the number of bytes from the end of the field
or protocol that you are testing.  Here's how to check the last 4 bytes
of a frame:

    frame[-4] == 0.1.2.3

or

    frame[-4:4] == 0.1.2.3

All the above tests can be combined together with logical expressions. 
These too are expressable in C-like syntax or with English-like
abbreviations:

    and, &&   Logical AND
    or, ||    Logical OR
    xor, ^^   Logical XOR
    not, !    Logical NOT

Expressions can be grouped by parentheses as well.  The following are
all valid display filter expression:

    tcp.port == 80 and ip.src == 192.168.2.1
    not llc
    (ipx.srcnet == 0xbad && ipx.srnode == 0.0.0.0.0.1) || ip
    tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29

A special caveat must be given regarding fields that occur more than
once per packet.  "ip.addr" occurs twice per IP packet, once for the
source address, and once for the destination address.  Likewise,
tr.rif.ring fields can occur more than once per packet.  The following
two expressions are not equivalent:

        ip.addr ne 192.168.4.1
    not ip.addr eq 192.168.4.1

The first filter says "show me all packets where an ip.addr exists that
does not equal 192.168.4.1".  That is, as long as one ip.addr in the
packet does not equal 192.168.44.1, the packet passes the display
filter.  The second filter "don't show me any packets that have at least
one ip.addr field equal to 192.168.4.1".  If one ip.addr is 192.168.4.1,
the packet does not pass.  If B<neither> ip.addr fields is 192.168.4.1,
then the packet passes.

It is easy to think of the 'ne' and 'eq' operators as having an implict
"exists" modifier when dealing with multiply-recurring fields.  "ip.addr
ne 192.168.4.1" can be thought of as "there exists an ip.addr that does
not equal 192.168.4.1".

Be careful with multiply-recurring fields; they can be confusing.

The following is a table of protocol and protocol fields that are
filterable in B<Ethereal>.  The abbreviation of the protocol or field is
given.  This abbreviation is what you use in the display filter.  The
type of the field is also given.

=insert_dfilter_table

=head1 FILES

F</usr/local/etc/ethereal.conf> and F<$HOME/.ethereal/preferences>
contain system-wide and personal preference settings, respectively.  The
file contains preference settings of the form I<prefname>B<:>I<value>,
one per line, where I<prefname> is the name of the preference (which is
the same name that would appear in the preference file), and I<value> is
the value to which it should be set; white space is allowed between B<:>
and I<value>.  A preference setting can be continued on subsequent lines
by indenting the continuation lines with white space.  A B<#> character
starts a comment that runs to the end of the line.

The system-wide preference file is read first, if it exists, overriding
B<Ethereal>'s default values; the personal preferences file is then
read, if it exists, overriding default values and values read from the
system-wide preference file.

Note that whenever the preferences are saved by using the I<Save> button
in the I<Edit:Preferences> dialog box, F<$HOME/.ethereal/preferences>
will be overwritten with the new settings, destroying any comments that
were in the file.

F</etc/ethers> is consulted to correlate 6-byte hardware addresses to
names.  If an address is not found in F</etc/ethers>, the
F<$HOME/.ethereal/ethers> file is consulted next.  Each line contains
one hardware address and name, separated by whitespace.  The digits of
the hardware address are separated by either a colon (:), a dash (-), or
a period (.).  The following three lines are valid lines of an ethers
file:

  ff:ff:ff:ff:ff:ff          Broadcast
  c0-00-ff-ff-ff-ff          TR_broadcast
  00.00.00.00.00.00          Zero_broadcast

F</usr/local/etc/manuf> matches the 3-byte vendor portion of a 6-byte
hardware address with the manufacturer's name.  The format of the file
is the same as the F</etc/ethers> file, except that each address is
three bytes instead of six.

F</etc/ipxnets> and F<$HOME/.ethereal/ipxnets> correlate 4-byte IPX
network numbers to names.  The format is the same as the F</etc/ethers>
file, except that each address if four bytes instead of six. 
Additionally, the address can be represented a single hexadecimal
number, as is more common in the IPX world, rather than four hex octets. 
For example, these four lines are valid lines of an ipxnets file.

  C0.A8.2C.00              HR
  c0-a8-1c-00              CEO
  00:00:BE:EF              IT_Server1
  110f                     FileServer3

=head1 SEE ALSO

L<tcpdump(8)>, L<pcap(3)>

=head1 NOTES

The latest version of B<Ethereal> can be found at
B<http://ethereal.zing.org>.

=head1 AUTHORS

  Original Author
  -------- ------
  Gerald Combs  <gerald@zing.org>


  Contributors
  ------------
  Gilbert Ramirez          <gram@xiexie.org>
  Hannes R. Boehm          <hannes@boehm.org>
  Mike Hall                <mlh@io.com>
  Bobo Rajec               <bobo@bsp-consulting.sk>
  Laurent Deniel           <deniel@worldnet.fr>
  Don Lafontaine           <lafont02@cn.ca>
  Guy Harris               <guy@alum.mit.edu>
  Simon Wilkinson          <sxw@dcs.ed.ac.uk>
  Joerg Mayer              <jmayer@telemation.de>
  Martin Maciaszek         <fastjack@i-s-o.net>
  Didier Jorand            <Didier.Jorand@alcatel.fr>
  Jun-ichiro itojun Hagino <itojun@iijlab.net>
  Richard Sharpe           <sharpe@ns.aus.com>
  John McDermott           <jjm@jkintl.com> 
  Jeff Jahr                <jjahr@shastanets.com>
  Brad Robel-Forrest       <bradr@watchguard.com>
  Ashok Narayanan          <ashokn@cisco.com>
  Aaron Hillegass          <aaron@classmax.com>
  Jason Lango              <jal@netapp.com>
  Johan Feyaerts           <Johan.Feyaerts@siemens.atea.be>
  Olivier Abad             <oabad@cybercable.fr>
  Thierry Andry            <Thierry.Andry@advalvas.be>
  Jeff Foster              <jjfoste@woodward.com>
  Peter Torvals            <petertv@xoommail.com>
  Christophe Tronche       <ch.tronche@computer.org>
  Nathan Neulinger         <nneul@umr.edu>
  Tomislav Vujec           <tvujec@carnet.hr>
  Kojak                    <kojak@bigwig.net>
  Uwe Girlich              <Uwe.Girlich@philosys.de>
  Warren Young             <tangent@mail.com>
  Heikki Vatiainen         <hessu@cs.tut.fi>
  Greg Hankins             <gregh@twoguys.org>
  Jerry Talkington         <jerryt@netapp.com>
  Dave Chapeskie           <dchapes@ddm.on.ca>
  James Coe                <jammer@cin.net>
  Bert Driehuis            <driehuis@playbeing.org>
  Stuart Stanley           <stuarts@mxmail.net>
  John Thomes              <john@ensemblecom.com>
  Laurent Cazalet          <laurent.cazalet@mailclub.net>
  Thomas Parvais           <thomas.parvais@advalvas.be>
  Gerrit Gehnen            <G.Gehnen@atrie.de>
  Craig Newell             <craign@cheque.uq.edu.au>
  Ed Meaney                <emeaney@altiga.com>
  Dietmar Petras           <DPetras@ELSA.de> 
  Fred Reimer              <fwr@ga.prestige.net>
  Florian Lohoff           <flo@rfc822.org>
  Jochen Friedrich         <jochen+ethereal@scram.de>
  Paul Welchinski          <paul.welchinski@telusplanet.net>
  Doug Nazar               <nazard@dragoninc.on.ca>
  Andreas Sikkema          <andreas.sikkema@philips.com>
  Mark Muhlestein          <mmm@netapp.com>
  Graham Bloice            <graham.bloice@trihedral.com>
  Ralf Schneider           <ralf.schneider@alcatel.se>
  Yaniv Kaul               <ykaul@checkpoint.com>
  Paul Ionescu             <ipaul@romsys.ro>
  Mark Burton              <markb@ordern.com>
  Stefan Raab              <stefan.raab@nextel.com>
  Mark Clayton             <clayton@shore.net>
  Michael Rozhavsky        <mike@tochna.technion.ac.il>
  Dug Song                 <dugsong@monkey.org>
  Michael Tuexen           <Michael.Tuexen@icn.siemens.de>
  Bruce Korb               <bkorb@sco.com>
  Jose Pedro Oliveira      <jpo@di.uminho.pt>
  David Frascone           <dave@frascone.com>
  Peter Kjellerstedt       <pkj@axis.com>
  Phil Techau              <phil_t@altavista.net>
  Wes Hardaker             <wjhardaker@ucdavis.edu>
  Robert Tsai              <rtsai@netapp.com>
  Craig Metz               <cmetz@inner.net>

Alain Magloire <alainm@rcsm.ece.mcgill.ca> was kind enough to give his
permission to use his version of snprintf.c.

Dan Lasley <dlasley@promus.com> gave permission for his dumpit() hex-dump
routine to be used.