Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / doc / wsug_src / wsug_customize.adoc
blob73ca6ea1cf2ba307b1a7ac72c8f0259b8f5bd18b
1 // WSUG Chapter Customizing
3 [#ChapterCustomize]
5 == Customizing Wireshark
7 [#ChCustIntroduction]
9 === Introduction
11 Wireshark’s default behavior will usually suit your needs pretty well. However,
12 as you become more familiar with Wireshark, it can be customized in various ways
13 to suit your needs even better. In this chapter we explore:
15 * How to start Wireshark with command line parameters
17 * How to colorize the packet list
19 * How to control protocol dissection
21 * How to use the various preference settings
23 [#ChCustCommandLine]
25 === Start Wireshark from the command line
27 You can start Wireshark from the command line, but it can also be started from
28 most Window managers as well. In this section we will look at starting it from
29 the command line.
31 Wireshark supports a large number of command line parameters. To see what they
32 are, simply enter the command _wireshark -h_ and the help information shown in
33 <<ChCustEx1>> (or something similar) should be printed.
35 [#ChCustEx1]
36 .Help information available from Wireshark
37 ----
38 include::wireshark-h.txt[]
39 ----
41 We will examine each of the command line options in turn.
43 The first thing to notice is that issuing the command `wireshark` by itself will
44 launch Wireshark. However, you can include as many of the command line
45 parameters as you like. Their meanings are as follows ( in alphabetical order ):
47 // XXX - is the alphabetical order a good choice? Maybe better task based?
49 -a <capture autostop condition>::
50 --autostop <capture autostop condition>::
51 Specify a criterion that specifies when Wireshark is to stop writing
52 to a capture file. The criterion is of the form test:value, where test
53 is one of:
56     duration:value::
57     Stop writing to a capture file after value of seconds have elapsed.
59     filesize:value::
60     Stop writing to a capture file after it reaches a size of value
61     kilobytes (where a kilobyte is 1000 bytes, not 1024 bytes). If
62     this option is used together with the -b option, Wireshark will
63     stop writing to the current capture file and switch to the next
64     one if filesize is reached.
66     files:value::
67     Stop writing to capture files after value number of files were
68     written.
70     packets:value::
71     Stop writing to a capture file after value number of packets were written.
74 -b <capture ring buffer option>::
75 If a maximum capture file size was specified, this option causes Wireshark to
76 run in “ring buffer” mode, with the specified number of files. In “ring
77 buffer” mode, Wireshark will write to several capture files. Their
78 name is based on the number of the file and on the creation date and
79 time.
81 When the first capture file fills up Wireshark will switch to writing
82 to the next file, and so on.  With the files option it’s
83 also possible to form a “ring buffer.”  This will fill up new files until the
84 number of files specified, at which point the data in the first file will be
85 discarded so a new file can be written.
87 If the optional duration is specified, Wireshark will also
88 switch to the next file when the specified number of seconds has elapsed even
89 if the current file is not completely filled up.
92     duration:value::
93     Switch to the next file after value seconds have elapsed, even
94     if the current file is not completely filled up.
96     filesize:value::
97     Switch to the next file after it reaches a size of value kilobytes
98     (where a kilobyte is 1000 bytes, not 1024 bytes).
100     files:value::
101     Begin again with the first file after value number of files were
102     written (form a ring buffer).
104     packets:value::
105     Switch to the next file after value number of packets were written, even
106     if the current file is not completely filled up.
108     interval:value::
109     Switch to the next file when the time is an exact multiple of value seconds.
112 -B <capture buffer size>::
113 --buffer-size <capture buffer size>::
114 Set capture buffer size (in MB, default is 2MB). This is used by the capture
115 driver to buffer packet data until that data can be written to disk. If you
116 encounter packet drops while capturing, try to increase this size. Not supported
117 on some platforms.
119 -C <config profile>::
120 Start with the specified configuration profile.
122 -c <capture packet count>::
123 This option specifies the maximum number of packets to capture when capturing
124 live data. It would be used in conjunction with the `-k` option.
126 --capture-comment <comment>::
127 Add the comment string to the capture file, if supported by the file format.
129 -d <layer_type>==<selector>,<decode_as_dissector>::
130 "Decode As": override what protocol is called under specific circumstances.
131 See <<ChAdvDecodeAs>> for details about how this feature works.
135 An example of causing TCP traffic on port 8888 to be decoded as HTTP:
136 ----
137 wireshark -d tcp.port==8888,http
138 ----
140 To see all possible values for <layer_type>, run Wireshark or tshark with `-d help`.
141 You can see all possible values for <decode_as_dissectors> by running
142 `tshark -G dissectors` but note that not all dissectors can be used at all layers.
145 -D::
146 --list-interfaces::
147 Print a list of the interfaces on which Wireshark can capture, then exit. For
148 each network interface, a number and an interface name, possibly followed by a
149 text description of the interface, is printed. The interface name or the number
150 can be supplied to the `-i` flag to specify an interface on which to capture.
152 This can be useful on systems that don’t have a command to list them (e.g.,
153 Windows systems, or UNIX systems lacking `ifconfig -a`). The number can be
154 especially useful on Windows, where the interface name is a GUID.
156 Note that “can capture” means that Wireshark was able to open that device to
157 do a live capture. If, on your system, a program doing a network capture must be
158 run from an account with special privileges, then, if
159 Wireshark is run with the `-D` flag and is not run from such an account, it will
160 not list any interfaces.
162 --display <DISPLAY>::
163 Set the X display to use, instead of the one defined in the environment, or
164 the default display.
166 --enable-protocol <proto_name>::
167 --disable-protocol <proto_name>::
168 Enable and disable the dissection of the protocol.
170 --enable-heuristic <short_name>::
171 --disable-heuristic <short_name>::
172 Enable and disable the dissection of the heuristic protocol.
174 -f <capture filter>::
175 This option sets the initial capture filter expression to be used when capturing
176 packets.
178 --fullscreen::
179 Start Wireshark in full screen.
181 -g <packet number>::
182 After reading in a capture file using the -r flag, go to the given packet
183 number.
185 -h::
186 --help::
187 This option requests Wireshark to print its version and usage instructions
188 (as shown here) and exit.
190 -H::
191 Hide the capture info dialog during live packet capture.
193 -i <capture interface>::
194 --interface <capture interface>::
195 Set the name of the network interface or pipe to use for live packet capture.
197 Network interface names should match one of the names listed in `wireshark -D`
198 (described above). A number, as reported by `wireshark -D`, can also be used. If
199 you’re using UNIX, `netstat -i`, `ifconfig -a` or `ip link` might also work to
200 list interface names, although not all versions of UNIX support the `-a` flag to
201 `ifconfig`.
203 If no interface is specified, Wireshark searches the list of interfaces,
204 choosing the first non-loopback interface if there are any non-loopback
205 interfaces, and choosing the first loopback interface if there are no
206 non-loopback interfaces; if there are no interfaces, Wireshark reports an error
207 and doesn’t start the capture.
209 Pipe names should be either the name of a FIFO (named pipe) or “-” to read
210 data from the standard input. Data read from pipes must be in standard libpcap
211 format.
213 -J <jump filter>::
214 After reading in a capture file using the `-r` flag, jump to the first packet
215 which matches the filter expression. The filter expression is in display filter
216 format. If an exact match cannot be found the first packet afterwards is
217 selected.
219 -I::
220 --monitor-mode::
221 Capture wireless packets in monitor mode if available.
223 -j::
224 Use this option after the `-J` option to search backwards for a first packet to
225 go to.
227 -k::
228 The `-k` option specifies that Wireshark should start capturing packets
229 immediately. This option requires the use of the `-i` parameter to specify the
230 interface that packet capture will occur from.
232 -K <keytab file>::
233 Use the specified file for Kerberos decryption.
235 -l::
236 This option turns on automatic scrolling if the packet list pane is being
237 updated automatically as packets arrive during a capture (as specified by the
238 `-S` flag).
240 -L::
241 --list-data-link-types::
242 List the data link types supported by the interface and exit.
244 --list-time-stamp-types::
245 List timestamp types configurable for the interface and exit.
247 -m <font>::
248 This option sets the name of the font used for most text displayed by Wireshark.
250 // XXX - add an example!
252 -n::
253 Disable network object name resolution (such as hostname, TCP and UDP port
254 names).
256 -N <name resolving flags>::
257 Turns on name resolving for particular types of addresses and port numbers. The
258 argument is a string that may contain the following letters:
261     N::
262     Use external name resolver.
264     d::
265     Enable name resolution from captured DNS packets.
267     m::
268     Enable MAC address resolution.
270     n::
271     Enable network address resolution.
273     t::
274     Enable transport layer port number resolution.
276     v::
277     Enable VLAN ID resolution.
280 -o <preference or recent settings>::
281 Sets a preference or recent value, overriding the default value and any value
282 read from a preference or recent file. The argument to the flag is a string of
283 the form _prefname:value_, where _prefname_ is the name of the preference (which
284 is the same name that would appear in the `preferences` or `recent` file), and
285 _value_ is the value to which it should be set. Multiple instances of `-o
286 <preference settings> ` can be given on a single command line.
290 [NOTE]
291 .Preferences and Profiles
292 ====
293 The preferences you specify on the command line will override any settings
294 you have changed in any of your profiles; this includes when switching from
295 one profile to another.
297 If you change a setting using the Preferences dialog
298 (see <<ChCustPreferencesSection>>) that you have also set on the command line,
299 the command line option will then be ignored, and the setting will change
300 as normal when you switch profiles.
301 ====
303 An example of setting a single preference would be:
305 ----
306 wireshark -o mgcp.display_dissect_tree:TRUE
307 ----
309 An example of setting multiple preferences would be:
310 ----
311 wireshark -o mgcp.display_dissect_tree:TRUE -o mgcp.udp.callagent_port:2627
312 ----
314 You can get a list of all available preference strings from the
315 preferences file. See <<AppFiles>> for details.
317 <<ChUserTable,User Accessible Tables (UATs)>> can be overridden using “uat:”
318 followed by the UAT file name (_not_ the preference name)
319 and a valid record for the file:
321 ----
322 wireshark -o "uat:user_dlts:\"User 0 (DLT=147)\",\"http\",\"0\",\"\",\"0\",\"\""
323 ----
325 The example above would dissect packets with a libpcap data link type 147 as
326 HTTP, just as if you had configured it in the DLT_USER protocol preferences.
329 [NOTE]
330 ====
331 You can only _add_ UAT entries from the command line. You can not
332 modify or remove existing entries in a UAT in this way.
333 ====
335 -p::
336 --no-promiscuous-mode::
337 Don’t put the interface into promiscuous mode. Note that the interface might be
338 in promiscuous mode for some other reason. Hence, `-p` cannot be used to ensure
339 that the only traffic that is captured is traffic sent to or from the machine on
340 which Wireshark is running, broadcast traffic, and multicast traffic to
341 addresses received by that machine.
343 -P <path setting>::
344 Special path settings usually detected automatically. This is used for special
345 cases, e.g., starting Wireshark from a known location on an USB stick.
347 The criterion is of the form key:path, where key is one of:
350     persconf:path::
351     Path of personal configuration files, like the preferences files.
353     persdata:path::
354     Path of personal data files, it’s the folder initially opened. After the
355     initialization, the recent file will keep the folder last used.
358 -r <infile>::
359 --read-file <infile>::
360 This option provides the name of a capture file for Wireshark to read and
361 display. This capture file can be in one of the formats Wireshark understands.
363 -R <read (display) filter>::
364 --read-filter <read (display) filter>::
365 This option specifies a display filter to be applied when reading packets from a
366 capture file. The syntax of this filter is that of the display filters discussed
367 in <<ChWorkDisplayFilterSection>>. Packets not matching the filter
368 are discarded.
370 -s <capture snapshot length>::
371 --snapshot-length <capture snapshot length>::
372 This option specifies the snapshot length to use when capturing packets.
373 Wireshark will only capture _snaplen_ bytes of data for each packet.
375 -S::
376 This option specifies that Wireshark will display packets as it captures them.
377 This is done by capturing in one process and displaying them in a separate
378 process. This is the same as “Update list of packets in real time” in the
379 “Capture Options” dialog box.
381 -t <time stamp format>::
382 This option sets the format of packet timestamps that are displayed in the
383 packet list window. The format can be one of:
386 r:: Relative, which specifies timestamps are
387 displayed relative to the first packet captured.
389 a:: Absolute, which specifies that actual times
390 be displayed for all packets.
392 ad:: Absolute with date, which specifies that
393 actual dates and times be displayed for all packets.
395 adoy:: Absolute with YYYY/DOY date, which specifies that
396 actual dates and times be displayed for all packets.
398 d:: Delta, which specifies that timestamps
399 are relative to the previous packet.
401 dd: Delta,  which specifies that timestamps
402 are relative to the previous displayed packet.
404 e:: Epoch, which specifies that timestamps
405 are seconds since epoch (Jan 1, 1970 00:00:00)
407 u:: Absolute, which specifies that actual times
408 be displayed for all packets in UTC.
410 ud:: Absolute with date, which specifies that
411 actual dates and times be displayed for all packets in UTC.
413 udoy:: Absolute with YYYY/DOY date, which specifies that
414 actual dates and times be displayed for all packets in UTC.
417 -u <s | hms>::
418 Show timesamps as seconds (“s”, the default) or hours, minutes, and seconds (“hms”)
420 -v::
421 --version::
422 This option requests Wireshark to print out its version information and
423 exit.
425 -w <savefile>::
426 This option sets the name of the file to be used to save captured packets.
427 This can be '-' for stdout.
429 -y <capture link type>::
430 --link-type <capture like types>::
431 If a capture is started from the command line with `-k`, set the data
432 link type to use while capturing packets. The values reported by `-L`
433 are the values that can be used.
435 --time-stamp-type <type>::
436 If a capture is started from the command line with `-k`, set the time
437 stamp type to use while capturing packets. The values reported by
438 `--list-time-stamp-types` are the values that can be used.
440 -X <eXtension option>::
441 Specify an option to be passed to a Wireshark/TShark module. The eXtension
442 option is in the form extension_key:value, where extension_key can be:
445 lua_script:<lua_script_filename>::
446 Tells Wireshark to load the given script in addition to the default Lua scripts.
448 lua_script[num]:argument::
449 Tells Wireshark to pass the given argument to the lua script identified by
450 _num_, which is the number indexed order of the _lua_script_ command. For
451 example, if only one script was loaded with `-X lua_script:my.lua`, then `-X
452 lua_script1:foo` will pass the string _foo_ to the _my.lua_ script. If two
453 scripts were loaded, such as `-X lua_script:my.lua -X lua_script:other.lua`
454 in that order, then a `-X lua_script2:bar` would pass the
455 string _bar_ to the second lua script, ie., _other.lua_.
457 read_format:<file_type>::
458 Tells Wireshark to use a specific input file type, instead of determining it
459 automatically.
461 stdin_descr:<description>::
462 Define a description for the standard input interface, instead of the default:
463 "Standard input".
466 -Y <display filter>::
467 --display-filter <display filter>::
468 Start with the given display filter.
470 -z <statistics-string>::
471 Get Wireshark to collect various types of statistics and display the
472 result in a window that updates in semi-real time. For the currently
473 implemented statistics consult the Wireshark manual page.
475 // XXX - add more details here!
478 [#ChCustColorizationSection]
480 === Packet colorization
482 A very useful mechanism available in Wireshark is packet colorization.
483 You can set up Wireshark so that it will colorize packets according to a
484 display filter.  This allows you to emphasize the packets you might be
485 interested in.
487 You can find a lot of coloring rule examples at the _Wireshark Wiki
488 Coloring Rules page_ at {wireshark-wiki-url}ColoringRules.
490 There are two types of coloring rules in Wireshark: temporary rules that
491 are only in effect until you quit the program, and permanent rules that
492 are saved in a preference file so that they are available the next time
493 you run Wireshark.
495 Temporary rules can be added by selecting a packet and pressing the kbd:[Ctrl]
496 key together with one of the number keys. This will create a coloring rule based
497 on the currently selected conversation. It will try to create a conversation
498 filter based on TCP first, then UDP, then IP and at last Ethernet. Temporary
499 filters can also be created by selecting the menu:Colorize with Filter[Color X]
500 menu items when right-clicking in the packet detail pane.
502 To permanently colorize packets, select menu:View[Coloring Rules...]. Wireshark
503 will display the “Coloring Rules” dialog box as shown in
504 <<ChCustColoringRulesDialog>>.
506 [#ChCustColoringRulesDialog]
507 .The “Coloring Rules” dialog box
508 image::images/ws-coloring-rules-dialog.png[{screenshot-attrs}]
510 If this is the first time using the Coloring Rules dialog and you’re using the
511 default configuration profile you should see the default rules, shown above.
513 [NOTE]
514 .The first match wins
515 ====
516 More specific rules should usually be listed before more general rules. For
517 example, if you have a coloring rule for UDP before the one for DNS, the rule
518 for DNS may not be applied (DNS is typically carried over UDP and the UDP rule
519 will match first).
520 ====
522 You can create a new rule by clicking on the btn:[+] button. You can delete
523 one or more rules by clicking the btn:[-] button. The “copy” button will
524 duplicate a rule.
526 You can edit a rule by double-clicking on its name or filter. In
527 <<ChCustColoringRulesDialog>> the name of the rule “Checksum Errors” is being
528 edited. Clicking on the btn:[Foreground] and btn:[Background] buttons will
529 open a color chooser (<<ChCustChooseColorDialog>>) for the foreground (text) and
530 background colors respectively.
532 [#ChCustChooseColorDialog]
533 .A color chooser
534 image::images/ws-choose-color-rule.png[{small-screenshot-attrs}]
536 The color chooser appearance depends on your operating system. The macOS color
537 picker is shown. Select the color you desire for the selected packets and click
538 btn:[OK].
540 <<ChCustColorFilterMany>> shows an example of several color filters being used
541 in Wireshark. Note that the frame detail shows that the “Bad TCP” rule
542 was applied, along with the matching filter.
544 [#ChCustColorFilterMany]
545 .Using color filters with Wireshark
546 image::images/ws-coloring-fields.png[{screenshot-attrs}]
549 [#ChCustProtocolDissectionSection]
551 === Control Protocol Dissection
553 The user can control how protocols are dissected.
555 Each protocol has its own dissector, so dissecting a complete packet will
556 typically involve several dissectors. As Wireshark tries to find the right
557 dissector for each packet (using static “routes” and heuristics “guessing”),
558 it might choose the wrong dissector in your specific case. For example,
559 Wireshark won’t know if you use a common protocol on an uncommon TCP port, e.g.,
560 using HTTP on TCP port 800 instead of the standard port 80.
562 There are two ways to control the relations between protocol dissectors: disable
563 a protocol dissector completely or temporarily divert the way Wireshark calls
564 the dissectors.
566 [#ChAdvEnabledProtocols]
568 ==== The “Enabled Protocols” dialog box
570 The Enabled Protocols dialog box lets you enable or disable specific protocols.
571 Most protocols are enabled by default. When a protocol is disabled, Wireshark
572 stops processing a packet whenever that protocol is encountered.
574 [NOTE]
575 ====
576 Disabling a protocol will prevent information about higher-layer protocols from
577 being displayed. For example, suppose you disabled the IP protocol and selected
578 a packet containing Ethernet, IP, TCP, and HTTP information. The Ethernet
579 information would be displayed, but the IP, TCP and HTTP information would not -
580 disabling IP would prevent it and the higher-layer protocols from being displayed.
581 ====
583 To enable or disable protocols select menu:Analyze[Enabled Protocols...].
584 Wireshark will pop up the “Enabled Protocols” dialog box as shown in
585 <<ChAdvEnabledProtocolsFig>>.
587 [#ChAdvEnabledProtocolsFig]
588 .The “Enabled Protocols” dialog box
589 image::images/ws-enabled-protocols.png[{screenshot-attrs}]
591 To disable or enable a protocol, simply click the checkbox using the mouse.
592 Note that typing a few letters of the protocol name in the search box will limit
593 the list to those protocols that contain these letters.
595 You can choose from the following actions:
597 btn:[Enable All]:: Enable all protocols in the list.
599 btn:[Disable All]:: Disable all protocols in the list.
601 btn:[Invert]:: Toggle the state of all protocols in the list.
603 btn:[OK]:: Save and apply the changes and close the dialog box, see <<AppFiles>> for details.
605 btn:[Cancel]:: Cancel the changes and close the dialog box.
607 [#ChAdvDecodeAs]
609 ==== User Specified Decodes
611 The “Decode As” functionality lets you override what protocol is called
612 under specific circumstances.
613 This might be useful if Wireshark is incorrectly choosing which dissector
614 to use for a particular TCP port, for example, or if you do some uncommon
615 experiments on your network.
617 [NOTE]
618 ====
619 Not all protocols support this feature, and not just any protocol field
620 can be used to override Wireshark's choice of dissector.
621 ====
623 Decode As is accessed by selecting the menu:Analyze[Decode As...]. Wireshark
624 will pop up the “Decode As” dialog box as shown in <<ChAdvDecodeAsFig>>.
626 [#ChAdvDecodeAsFig]
627 .The “Decode As” dialog box
628 image::images/ws-decode-as.png[{screenshot-attrs}]
630 In this dialog you are able to edit entries by means of the edit buttons on the
631 left.
633 You can also pop up this dialog box from the context menu in the
634 <<ChWorkPacketListPanePopUpMenuSection,“Packet List”>> or
635 <<ChWorkPacketDetailsPanePopUpMenuSection,“Packet Details”>> panes.
636 It will then contain a new line based on the currently selected
637 packet.
639 These settings will be lost if you quit Wireshark or change profile unless you
640 save the entries.
642 btn:[+]:: Add new entry for selected packet
644 btn:[-]:: Remove the selected entry.
646 btn:[Copy]:: Copy the selected entry.
648 btn:[Clear]:: Clear the list of user specified decodes.
650 btn:[OK]:: Apply the user specified decodes and close the dialog box.
652 btn:[Save]:: Save and apply the user specified decodes and close the dialog box.
654 btn:[Cancel]:: Cancel the changes and close the dialog box.
656 Each entry in this dialog will have the following columns.
657 You can double-click on an entry’s field to change its value,
658 as long as it’s not an informational (read-only) field.
660 [options="header",cols="3,6"]
661 |===
662 |Heading |
663 Description
665 |Field |
666 The field whose value should be examined when determining the dissector to use.
667 Double-click to show a list of all fields which are supported for this feature.
669 |Value |
670 The specific value of the chosen field which should indicate
671 to Wireshark to use your chosen dissector override.
673 |Type |
674 Read-only. Shows the type of the chosen field’s value;
675 for example, integer or string.
677 |Default |
678 Read-only. Shows what dissector would normally be called if the chosen field
679 had the chosen value.
681 |Current |
682 The dissector you wish to be called instead.
684 You will only be able to choose dissectors for protocols which could be
685 directly carried by the containing protocol. For example, you cannot
686 specify that data carried over TCP should be passed to the Ethernet dissector.
687 |===
689 [TIP]
690 ====
691 You can also specify “Decode As” entries on the Wireshark or tshark
692 command line. See the documentation of the `-d` option in
693 <<ChCustCommandLine>>.
694 ====
696 [#ChCustPreferencesSection]
698 === Preferences
700 There are a large number of preferences you can set. Simply select the menu:Edit[Preferences...] (menu:Wireshark[Preferences...] on macOS) and Wireshark will pop up the Preferences dialog box as shown in <<ChCustGUIPrefPage>>, with the “Appearance” page as default.
701 On the left side is a tree where you can select the page to be shown.
703 * The btn:[OK] button will apply the preferences settings and close the dialog.
705 // Uncomment if bug 12566 is ever fixed.
706 // * The btn:[Apply] button will apply the preferences settings and keep the dialog open.
708 * The btn:[Cancel] button will restore all preferences settings to the last saved state.
710 [TIP]
711 ====
712 You can also see a protocol's preferences from the pop-up menus for the
713 <<ChWorkPacketListPanePopUpMenuSection,“Packet List”>> or
714 <<ChWorkPacketDetailsPanePopUpMenuSection,“Packet Details”>> panes,
715 by going to the _Protocol Preferences_ menu item, which will pop open a sub-menu.
717 The top entry in this new menu will take you to the Preferences dialog box
718 as shown in <<ChCustGUIPrefPage>>, with the chosen protocol's page showing.
720 The _final_ entry in this menu will _completely disable_ the dissection of
721 the chosen protocol. See <<ChAdvEnabledProtocols>> for how to re-enable the protocol.
723 Any other entries in this menu will let you quickly adjust individual
724 preferences for this protocol without needing to open the full Preferences dialog box.
725 ====
727 ==== Appearance
729 These preferences give you the option to control the makeup of the GUI.
731 [#ChCustGUIPrefPage]
732 .The preferences dialog box
733 image::images/ws-pref-appearance.png[{screenshot-attrs}]
735 Selecting _Remember main window size and placement_ allow for a repeatable experience when restarting Wireshark.
737 Selecting _Open files in_ allows you to determine where to start the file selection dialog when opening capture files.
739 The preference _Show up to_ allows you to determine how much history is tracked for display filter entries and recent files shown in the main application window.
741 Selecting _Confirm unsaved capture files_ causes a dialog to appear when closing a capture file when it was not yet saved.
742 This may help preventing inadvertent loss of data, eg., when Wireshark is closed.
744 Selecting _Display autocompletion for filter text_ causes a drop down list to appear when you enter a display filter.
745 This drop down list contains known display filters for easy selection.
747 The preference _Main toolbar style_ allows you to tailor the toolbar style in one of three ways.
749 The Wireshark main window title is replaced by the name of the opened capture file.
750 The preferences _Window title_ and _Prepend window title_ allow you to add bracketed strings after and before the window title.
751 These window title strings can contain variables which will be replaced by their respective values.
753 The following variables are available.
755 * %C = Capture comment from command line
756 * %F = File path of the capture file
757 * %P = Currently selected profile name
758 * %S = Conditional separator (dash) that only shows when surrounded by variables with values or static text
759 * %V = Wireshark version info
761 The _Language_ preference allows you to select the language used in the GUI.
762 Note that the protocol information and details are kept in the language commonly used in this field, that being English.
764 ==== Columns
766 These preferences give you the option to control the definition of the columns shown in the packet list, once a capture file is loaded.
768 .Column preferences
769 image::images/ws-pref-appearance-columns.png[{screenshot-attrs}]
771 btn:[+]:: Add new entry to the list.
773 btn:[-]:: Remove the selected entry.
775 Selecting _Show displayed columns only_ hides all non-displayed columns from the list, possibly making navigating the list easier.
777 The rows can be dragged and dropped to arrange them in the desired order.
779 The columns in the entries are as follows.
781 Selecting _Displayed_ causes the column to be shown in the packet list.
783 The _Title_ is the text shown in the header of the column in the packet list.
785 The _Type_ is the type of value to be shown. This can be a predefined type, ie. a value in a defined format, or custom.
787 The following settings are applicable when the _Type_ is set to "custom"
789 The _Fields_ setting is the display filter name of the field to be shown in the column in the packet list.
791 The _Field Occurrence_ setting is count of the given field in the frame, for fields that appear more than once in a frame.
793 Selecting _Resolved_ causes name resolution to be applied to the field value, when available.
795 ==== Font and Colors
797 These preferences give you the option to select the font and colors used in the various packet panes.
798 Most usable is to select a mono spaced font, which allows for a cleaner presentation, but using a proportional font is possible too.
800 .Font and colors preferences
801 image::images/ws-pref-appearance-fonts-and-colors.png[{screenshot-attrs}]
803 ==== Layout
805 These preferences allow you to define the layout of the GUI once a capture file is loaded.
807 .Layout preferences
808 image::images/ws-pref-appearance-layout.png[{screenshot-attrs}]
810 Make sure that you have at least one pane configured to contain the Packet list.
811 Three panes can be active at the same time and they can be laid out as shown in the top layer.
812 The exact sizes of these panes can be changed as needed once a capture file is opened.
814 Selecting _Show packet list separator_ causes the packet list entries to be slightly set apart, which may improve readability at the cost of the amount of packets shown in the packet list.
816 Selecting _Show column definition in column context menu_ make the column context menu wider to show the currently configured field type for the column.
817 This may help identify the column to select or modify.
819 Selecting _Allow the list to be sorted_ enables the sort operator on all the columns.
820 This may prevent inadvertently triggering a sort, which may take considerable time for larger capture files.
822 The _Maximum number of cached rows_ setting determines how much packet list information is cached to speed up sort operations, where a larger number causes more memory to be consumed by the cache.
823 Be aware that changing other dissection settings may invalidate the cache content.
825 Selecting _Enable mouse-over colorization_ enables the highlighting of the currently pointed to packet in the packet list.
826 The currently selected packet is always highlighted.
828 Selecting _Show selected packet number_ adds the selected packet number to the capture file details in the status bar, taking up some space in the status bar.
830 Selecting _Show file load time_ adds the time it took to load the capture file to the status bar, taking up some space in the status bar.
832 ==== Capture
834 These preferences allow you to set the default conditions for packet capture.
836 .Capture preferences
837 image::images/ws-pref-capture.png[{screenshot-attrs}]
839 The default interface is the interface used for packet capture in case no other is selected on the opening page of GUI.
840 Note that this can be multiple interfaces separated by a comma.
842 Selecting _Capture packets in promiscuous mode_ causes the network interface(s) to capture on to be configured in promiscuous mode.
843 This allows all (Ethernet) frames to be received by the network interface to be capture, not only those that are addressed to the capture interface.
845 Selecting _Capture packets in pcapng format_ causes the Next-Generation packet capture file format to be used when capturing.
846 This much more capable packet capture file format has many advantages over the original format, although not every external tool may be capable of handling packet captures in this format.
848 Selecting _Update list of packets in real time_ causes the packet list to fill up and possibly scroll up during the packet capture process.
849 This does give an insight in the packets captured, although it takes processing power to dissect the capture packets.
851 The preference _Interval between updates (ms)_ allows you to configure how often the packet list is updated during the packet capture process.
852 A higher interval reduces processing, but causes more delay between capture and display in the packet list.
854 Selecting _Don't load interfaces on startup_ prevents Wireshark from spawning dumpcap to populate the list of capture interfaces on the local system.
855 This might be a time consuming operation delaying the start of the program, however on most systems this is not an issue.
856 The interface list can always be populated after Wireshark is started via menu:Capture[Refresh Interfaces].
858 Selecting _Disable external capture interfaces_ prevents Wireshark from spawning extcap programs to list off their capture interfaces.
859 This might be a time consuming operation delaying the start of the program, however on most systems this is not an issue.
861 [#ChCustPrefsExpertSection]
863 ==== Expert Items
865 These preferences allow you to modify the severity set for expert items.
867 .Expert item preferences
868 image::images/ws-pref-expert.png[{screenshot-attrs}]
870 If, for whatever reason, you find that the severity for certain expert items does not match your needs you can change them here and have them used as such, showing up in the appropriate lists and overviews.
871 Get the Field name from selecting the field in the packet details pane, then observe the name shown in the status bar.
872 This is the name you enter on a new line in the list, while setting the desired _Severity_ in the next column.
874 btn:[+]:: Add new entry to the list.
876 btn:[-]:: Remove the selected entry.
878 btn:[Copy]:: Copy the selected entry.
880 btn:[⌃]:: Move the selected entry up in the list.
882 btn:[⌄]:: Move the selected entry down in the list.
884 btn:[Clear]:: Clear the list of user specified expert item severities.
886 btn:[Copy from]:: Copy the list of user specified expert item severities from another profile.
888 [#ChCustFilterButtons]
889 ==== Filter Buttons
891 Having quick access to regularly used display filter expressions can be a real productivity boost.
892 Here you can define your own display filter buttons.
894 .Filter buttons
895 image::images/ws-pref-filter-buttons.png[{screenshot-attrs}]
897 btn:[+]:: Add new entry to the list.
899 btn:[-]:: Remove the selected entry.
901 btn:[Copy]:: Copy the selected entry.
903 btn:[⌃]:: Move the selected entry up in the list.
905 btn:[⌄]:: Move the selected entry down in the list.
907 btn:[Clear]:: Clear the list of user specified display filter buttons.
909 btn:[Copy from]:: Copy the list of user specified display filter buttons from another profile.
911 The columns in the entries are as follows.
913 Selecting _Show in toolbar_ causes the button to be shown in the toolbar besides the display filter text entry.
915 The _Button Label_ is the text shown on the button in the toolbar.
916 The use of a double slash causes the button to create a dropdown list to allow grouping of multiple buttons, e.g. TCP//Syn and TCP//Res.
918 The _Filter Expression_ is the <<ChWorkBuildDisplayFilterSection,display filter expression>> entered into the display filter text entry when the button is clicked.
920 The _Comment_ is the comment text which appears in a bubble when the mouse hovers over the button.
922 [#ChCustPrefsNameSection]
924 ==== Name Resolution
926 These preferences allow you to configure which numeric identifiers in protocols are translated into human readable text.
927 For some of these identifiers the readable texts are read from configurable external sources.
929 .Name resolution preferences
930 image::images/ws-pref-name-resolution.png[{screenshot-attrs}]
932 Selecting _Resolve MAC addresses_ causes the OUI (Organizationally Unique Identifier) at the start of an Ethernet address to be translated into the name registered with the IEEE for that OUI.
934 Selecting _Resolve transport names_ causes the UDP and TCP port numbers to be translated into the service registered to these ports by IANA.
936 Selecting _Resolve network (IP) addresses_ causes IPv4, IPv6 and IPX addresses to be translated into their corresponding host name.
937 To do this Wireshark reaches out to DNS servers to request names for addresses it finds in packets.
938 There are several way to do this, which can be controlled through the following preferences.
940 Selecting _Use captured DNS packet data for name resolution_ causes DNS response packets in the capture file to fill the network address resolution table.
941 These can then be used to resolve addresses found in the packets.
943 Selecting _Use your system's DNS settings for name resolution_ causes DNS requests to be made as would be for other network applications.
945 Selecting _Use a custom list of DNS servers for name resolution_ causes DNS requests to be made to manually configured DNS servers.
947 The _DNS Servers_ btn:[Edit...] button provides access to the dialog to manage these manually configured DNS servers.
949 The _Maximum concurrent requests_ input field allows you to limit the amount of DNS queries made at the same time.
951 Selecting _Resolve VLAN IDs_ causes the file "vlans" to be read and used to name VLANs.
952 This file has the simple format of one line per VLAN, starting wit VLAN ID, a tab character, followed by the name of the VLAN.
954 Selecting _Resolve SS7 PCs_ causes the file "ss7pcs" to be read and used to name SS7 Point Codes.
955 This file has the simple format of one line per Point Code, starting with Network Indicator, a dash, the Point Code in decimal, a tab character, followed by the name of the Point Code.
957 Selecting _Enable OID resolution_ causes the SMI library to be initialized.
958 This library is capable of loading MIB/PIB files to provide name resolution for SMI objects, as present in SNMP packets.
960 Selecting _Suppress SMI errors_ prevents the SMI library from emitting error messages while loading MIB/PIB files.
961 The SMI library is very sensitive to irregularities in these files often resulting in harmless error being emitted.
963 The _SMI (MIB and PIB) paths_ btn:[Edit...] button provides access to the dialog to manage the directories where the MIB/PIB files to be loaded can be found.
965 The _SMI (MIB and PIB) modules_ btn:[Edit...] button provides access to the dialog to manage the MIB/PIB modules to be loaded.
967 Selecting _Enable IP geolocation_ causes the background MaxMind database IP geolocation resolver to be used to attempt to geolocate IP addresses in the packets.
969 The _MaxMind database directories_ btn:[Edit...] button provides access to the dialog to manage the directories where the MaxMind database files can be found. See <<ChMaxMindDbPaths>>.
971 [#ChCustPrefsProtocolsSection]
973 ==== Protocols
975 Wireshark supports quite a few protocols, which is reflected in the long list of child entries of the “Protocols” pane.
976 You can jump to the preferences for a specific protocol by expanding “Protocols” and typing the first few letters of the protocol name.
978 .Protocol preferences
979 image::images/ws-pref-protocols.png[{screenshot-attrs}]
981 There are a few general protocol related preferences, listed below.
983 Selecting _Display hidden protocol items_ influences what is shown in the packet details pane of the packet selected from the packet list.
984 Some protocol dissectors add hidden protocol items that provide additional interpretations of the packet data, or with different display filter strings.
985 These may or may not provide valuable information to the user and may clutter the output, therefor these items can be hidden.
987 Selecting _Display byte fields with a space character between bytes_ influences the way a byte field in shown in the packet details pane of the packet selected in the packet list, if the dissector creates a byte field that is.
988 The bytes in the byte field are normally shown as a concatenated sequence of hexadecimals.
989 This preference allows you to get the representation of each byte separated by a space.
990 This may improve readability of the individual bytes in the byte field.
992 Selecting _Look for incomplete dissectors_ causes expert items to be added to the dissection of packet data for which the dissector does not create an interpretation.
993 Dissectors should strive to not skip packet bytes and this preference allows you to be made aware of this.
995 Selecting _Enable stricter conversation tracking heuristics_ allows dissectors to take more identifiers into consideration when creating "conversations".
996 These are used to track related packets.
997 The heuristics for these conversations are sensitive to mis-identification of packets, possibly corrupting conversation analysis.
998 Adding more identifiers can reduce the change of this happening.
999 Currently only the IPv4, ICMP and ICMPv6 dissector use this preference.
1001 Selecting _Ignore duplicate frames_ causes a duplicate frame to appear in the packet list, but flagged as ignored, hence not dissected.
1002 The determination of a duplicate frame is made based on the SHA256 hash of the bytes in the frame.
1004 The preference _Deinterlacing conversations key_ gives you options for deinterlacing the conversations, for the Ethernet encapsulation only.
1005 As opposed to _hardware duplicates_ which show absolutely similar frames, _capture duplicates_ are the consequence of the capture method
1006 (capture on multiple interfaces for example) and show similar payloads with one or more different fields.
1007 While _NONE_ keeps the historical behaviour, the other options are built on three keys with the following meanings:
1008  _V_ (VLAN), _M_ (MAC Address), _I_ (Interface).
1009 The presence of packets which seem to be duplicates because they have the same payload but aren't filtered by the other preference _Ignore duplicate frames_,
1010 is a strong indication that a deinterlacing key is likely to change the interpretation.
1011 Check carefully the different values of Interface IDs, MAC Addresses, and VLAN Tags, to identify which deinterlacing key is appropriate for 
1012 isolating the conversations and bringing the proper interpretation.
1014 The preference _The max number of hashes to keep in memory for determining duplicate frames_ allows you to set how large the set of frames to consider for duplication is.
1016 [#ChCustPrefsRSASection]
1018 ==== RSA Keys
1020 For more information see {wireshark-wiki-url}TLS.
1022 .RSA keys
1023 image::images/ws-pref-rsa-keys.png[{screenshot-attrs}]
1025 ==== Statistics
1027 These preference have influence on the Statistics Tree (stats_tree) based dialogs accessible via the _Statistics_ menu.
1029 .Statistics preferences
1030 image::images/ws-pref-statistics.png[{screenshot-attrs}]
1032 The preference _Tap update interval in ms_ allows you to set how quickly protocol taps are being updated, partially determining the update speed of various dialogs and graphs.
1034 Selecting _Enable the calculation of burst information_ allows the Statistics Tree system to calculate burst information.
1036 Selecting _Show burst count for item rather than rate_ allows the statistics nodes to show the count of events within the burst window instead of a burst rate.
1037 Burst rate is calculated as number of events within burst window divided by the burst window length.
1039 The preference _Burst rate resolution (ms)_ sets the duration of the time interval into which events are grouped when calculating the burst rate.
1040 Setting a higher resolution (ie., a smaller number) increases processing overhead.
1042 The preference _Burst rate window size (ms)_ sets the duration of the sliding window during which the burst rate is measured.
1043 Longer window relative to burst rate resolution increases processing overhead.
1044 This value will be truncated to a multiple of the _Burst rate resolution_ preference setting.
1046 The preference _Default sort column for stats_tree stats_ gives you to option to select one of the columns to sort on.
1048 Selecting _Default stats_tree sort order is descending_ causes a descending sort order based on the previously selected column.
1050 Selecting _Case sensitive sort of stats_tree item names_ causes a case sensitive sort based on the previous selected order and column.
1052 Selecting _Always sort 'range' nodes by name_ causes the sort to take place by name rather than values.
1054 Selecting _Always sort 'range' nodes in ascending order_ makes an exception for range nodes to the previously selected sort order.
1056 Selecting _Display the full stats_tree plug-in name_ causes the full menu path of the Statistics Tree plugin to be shown in the title.
1058 ==== Advanced
1060 The “Advanced” pane will let you view and edit all of Wireshark’s preferences, similar to link:about:config[] and link:chrome:flags[] in the Firefox and Chrome web browsers.
1062 .Advanced preferences
1063 image::images/ws-pref-advanced.png[{screenshot-attrs}]
1065 You can search for a preference by typing text into the “Search” entry.
1066 You can also pass preference names to Wireshark and TShark on the command line.
1067 For example, the __gui.prepend_window_title__ can be used to differentiate between different instances of Wireshark on your screen:
1069 [source,sh]
1070 ----
1071 $ wireshark -o "gui.prepend_window_title:LAN" &
1072 $ wireshark -o "gui.prepend_window_title:External Network" &
1073 ----
1075 For more information, including how to specify a <<ChUserTable,User Accessible Table>>
1076 entry on the command line, see the documentation for `-o` in <<ChCustCommandLine>>.
1078 [#ChCustConfigProfilesSection]
1080 === Configuration Profiles
1082 Configuration Profiles can be used to configure and use more than one set of
1083 preferences and configurations. Select the menu:Edit[Configuration Profiles...] menu item
1084 or press kbd:[Shift+Ctrl+A] or kbd:[Shift+Cmd+A] (macOS) and Wireshark will pop up
1085 the Configuration Profiles dialog box as shown in
1086 <<ChCustGUIConfigProfilesPage>>. It is also possible to click in the “Profile”
1087 part of the statusbar to popup a menu with available Configuration Profiles
1088 (<<ChUseWiresharkStatusbarProfile>>).
1090 Configuration files stored in each profile include:
1092 * Preferences (preferences) (<<ChCustPreferencesSection>>)
1094 * Capture Filters (cfilters) (<<ChWorkDefineFilterSection>>)
1096 * Display Filters (dfilters) (<<ChWorkDefineFilterSection>>)
1098 * Display Filter Macros (dmacros) (<<ChWorkDefineFilterMacrosSection>>)
1100 * Coloring Rules (colorfilters) (<<ChCustColorizationSection>>)
1102 * Disabled Protocols (disabled_protos) (<<ChAdvEnabledProtocols>>)
1104 * Most User Accessible Tables (<<ChUserTable>>)
1106 * Changed dissector assignments (__decode_as_entries__), which can be set in the “Decode
1107   As...” dialog box (<<ChAdvDecodeAs>>).
1109 * Some recent settings (recent), such as pane sizes in the Main window
1110   (<<ChUseMainWindowSection>>), column widths in the packet list
1111   (<<ChUsePacketListPaneSection>>), all selections in the menu:View[] menu
1112   (<<ChUseViewMenuSection>>) and the last directory navigated to in the “File
1113   Open” dialog.
1115 All other configurations are stored in the personal configuration folder and
1116 are common to all profiles.
1118 [#ChCustGUIConfigProfilesPage]
1119 .The configuration profiles dialog box
1120 image::images/ws-gui-config-profiles.png[{medium-screenshot-attrs}]
1122 Search for profile ...::
1123 The list of profiles can be filtered by entering part of the profile's name
1124 into the search box.
1126 Type selection::
1127 Profiles can be filtered between displaying "All profiles", "Personal profiles"
1128 and "Global profiles"
1129 * Personal profiles - these are profiles stored in the user's configuration directory
1130 * Global profiles - these are profiles provided with Wireshark
1132 New (+)::
1133 Create a new profile. The name of the created profile is “New profile”
1134 and is highlighted so that you can more easily change it.
1136 Delete (-)::
1137 Deletes the selected profile. This includes all configuration files used
1138 in this profile. Multiple profiles can be selected and deleted at the same time.
1139 It is not possible to delete the “Default” profile or global profiles.
1140 Deletion of the "Default" profile will reset this profile.
1142 Copy::
1143 Copies the selected profile. This copies the configuration of the
1144 profile currently selected in the list. The name of the created profile
1145 is the same as the copied profile, with the text “(copy)” and is
1146 highlighted so that you can more easily change it.
1148 Auto switch packet limit::
1149 The number of packets to check for automatic profile switching, described below.
1150 Setting this to zero disables automatic profile switching.
1152 btn:[Import]::
1153 Profiles can be imported from zip-archives as well as directly from directory
1154 structures. Profiles, which already exist by name will be skipped, as well as
1155 profiles named "Default".
1157 btn:[Export]::
1158 Profiles can be exported to a zip-archive. Global profiles, as well as the default
1159 profile will be skipped during export. Profiles can be selected in the list individually
1160 and only the selected profiles will be exported
1162 btn:[OK]::
1163 This button saves all changes, applies the selected profile and closes the
1164 dialog.
1166 btn:[Cancel]::
1167 Close this dialog. This will discard unsaved settings, new profiles will not be
1168 added and deleted profiles will not be deleted.
1170 btn:[Help]::
1171 Show this help page.
1173 ==== Automatic Profile Switching
1175 You can configure Wireshark to automatically change configuration profiles by adding a display filter to the "Auto Switch Filter" setting for a profile.
1176 When you open a capture file, Wireshark will check each filter against a limited number of packets and will switch to the first profile with a matching filter.
1177 The number of packets is determined by the "Auto switch packet limit" setting, and a limit of 0 will disable this feature.
1178 Manually changing your profile will disable this behavior until you open a different capture file.
1180 [#ChUserTable]
1182 === User Accessible Tables
1184 User Accessible Tables (UATs) are a type of preference table which may be
1185 associated with particular <<ChCustPrefsProtocolsSection,protocols>> or
1186 with the application as a whole.
1188 User Accessible Tables have a common editor dialog which works as described
1189 in <<ChCustPrefsExpertSection>> and <<ChCustFilterButtons>>. Note that
1190 the name of the file appears in the lower right corner of the dialog.
1192 The files are saved in a CSV format, where values are either double quoted
1193 ASCII strings (using C-style backslash escapes for non-printable characters)
1194 or unquoted hexstrings, depending on the field type. They can be edited directly
1195 when Wireshark is not running, though this is discouraged. Entries can
1196 also be appended to the table by passing an appropriate CSV formatted
1197 record string <<ChCustCommandLine,on the command line>>.
1199 // There's a number of newer dissector UATs that aren't mentioned here
1200 // and could use help sections.
1202 Most UATs are stored in the
1203 <<ChCustConfigProfilesSection,configuration profile>>:
1206 * Custom HTTP headers (custom_http_header_fields)
1208 * Custom IMF headers (imf_header_fields)
1210 * Custom LDAP AttributeValue types (custom_ldap_attribute_types)
1212 * <<ChCustFilterButtons,Display Filter Buttons>> (dfilter_buttons)
1214 * <<ChWorkDefineFilterMacrosSection,Display Filter Macros>> (dfilter_macros), prior to Wireshark 4.4
1216 * <<ChCustPrefsNameSection,DNS Servers>> (addr_resolve_dns_servers)
1218 * <<ChEssCategoryAttributes,ESS Category Attributes>> (ess_category_attributes)
1220 * <<ChCustPrefsExpertSection,Expert Item Severity>> (expert_severity)
1222 * <<Ch80211Keys,IEEE 802.11 WLAN Decryption Keys>> (80211_keys)
1224 * <<ChIKEv2DecryptionSection,IKEv2 decryption table>> (ikev2_decryption_table)
1226 * <<ChStatIOGraphs,I/O Graphs>> (io_graphs)
1228 * <<ChK12ProtocolsSection,K12 Protocols>> (k12_protos)
1230 * <<ChObjectIdentifiers,Object Identifier Names and Associated Syntaxes>> ()
1232 * <<ChStatPacketLengths,Packet Lengths>> (packet_lengths)
1234 * <<ChPresContextList,PRES Users Context List>> (pres_context_list)
1236 * <<ChSccpUsers,SCCP Users Table>> (sccp_users)
1238 * <<ChSNMPEnterpriseSpecificTrapTypes,SNMP Enterprise Specific Trap Types>> (snmp_specific_traps)
1240 * <<ChSNMPUsersSection,SNMP Users>> (snmp_users)
1242 * <<ChUserDLTsSection,User DLTs Table>> (user_dlts)
1244 * <<ChProtobufSearchPaths,Protobuf Search Paths>> (protobuf_search_paths)
1246 * <<ChProtobufUDPMessageTypes,Protobuf UDP Message Types>> (protobuf_udp_message_types)
1249 Other UATs are stored in the personal configuration directory and are
1250 common to all profiles:
1253 * <<ChMaxMindDbPaths,MaxMind Database Paths>> (maxmind_db_paths)
1255 * <<ChCustPrefsRSASection,RSA Private Keys>> (rsa_keys) and <<ChCustPrefsRSASection,PKCS #11 Provider Libraries>> (pkcs11_libs)
1257 * <<ChCustPrefsNameSection,SMI Modules>> (smi_modules) and <<ChCustPrefsNameSection,SMI Paths>> (smi_paths)
1260 [#ChEssCategoryAttributes]
1262 === ESS Category Attributes
1264 Wireshark uses this table to map ESS Security Category attributes to textual representations.  The values to put in this table are usually found in an http://www.xmlspif.org/[XML SPIF], which is used for defining security labels.
1266 This table is a user table, as described in <<ChUserTable>>, with the
1267 following fields:
1269 Tag Set::
1270 An Object Identifier representing the Category Tag Set.
1272 Value::
1273 The value (Label And Cert Value) representing the Category.
1275 Name::
1276 The textual representation for the value.
1278 [#ChMaxMindDbPaths]
1280 === MaxMind Database Paths
1282 If your copy of Wireshark supports https://www.maxmind.com/[MaxMind’s] MaxMindDB library, you can use their databases to match IP addresses to countries, cites, autonomous system numbers, and other bits of information.
1283 Some databases are https://dev.maxmind.com/geoip/geoip2/geolite2/[available at no cost for registered users], while others require a licensing fee.
1284 See https://www.maxmind.com/[the MaxMind web site] for more information.
1286 The configuration for the MaxMind database is a user table, as described
1287 in <<ChUserTable>>, with the following fields:
1289 Database pathname::
1290 This specifies a directory containing MaxMind data files. Any files
1291 ending with _.mmdb_ will be automatically loaded.
1293 By default Wireshark will always search for data files in
1294 `/usr/share/GeoIP` and `/var/lib/GeoIP` on non-Windows platforms
1295 and in `C:\ProgramData\GeoIP` and `C:\GeoIP` on Windows. You can
1296 put any additional search paths here, e.g. `C:\Program Files\Wireshark\GeoIP`
1297 might be a good choice on Windows.
1299 [NOTE]
1300 ====
1301 While the default search paths are not listed in the user table, they
1302 are in the list viewable by opening menu:Help[About Wireshark] and
1303 selecting the "Folders" tab.
1304 ====
1306 [#ChGeoIPDbPaths]
1308 Previous versions of Wireshark supported MaxMind's original GeoIP Legacy
1309 database format. They were configured similar to MaxMindDB files above,
1310 except GeoIP files must begin with _Geo_ and end with _.dat_. They are
1311 no longer supported and MaxMind stopped distributing GeoLite Legacy
1312 databases in April 2018.
1314 [#Ch80211Keys]
1316 === IEEE 802.11 WLAN Decryption Keys
1318 Wireshark can decrypt WEP and WPA/WPA2/WPA3 in pre-shared (or personal) mode,
1319 as well as in enterprise mode. Security improvements in more recent 802.11
1320 releases require distinct session keys, instead of being able to decipher
1321 all traffic to a given access point with a single known password and SSID.
1323 You can add decryption keys using Wireshark's IEEE 802.11 preferences.
1324 Up to 64 keys are supported.
1326 ==== Adding Keys
1328 Go to menu:Edit[Preferences >Protocols >IEEE 802.11], or, from the pop-up menu
1329 in the "Packet List" or "Packet Details" pane from a frame that contains IEEE
1330 802.11, menu:Protocol Preferences[IEEE 802.11 wireless LAN].
1331 You should see a window that looks like this:
1333 ."IEEE 802.11 wireless LAN" preferences
1334 image::images/ws-wireless-ieee-80211-pref.png[{screenshot-attrs}]
1336 Click on the "Edit..." button next to "Decryption Keys" to add keys.
1337 You should see a window that looks like this:
1339 .802.11 Decryption Key Types
1340 image::images/ws-wireless-key-type.png[{screenshot-attrs}]
1342 When you click the **+** button to add a new key, there are five key types you
1343 can choose from: **wep**, **wpa-pwd**, **wpa-psk**, **tk**, or **msk**.
1344 The correct key type(s) depend on the Cipher Suite and Authentication and
1345 Key Management Suite (AKMS) used to encrypt the wireless traffic.
1347 wep:: The key must be provided as a string of hexadecimal numbers, with or
1348 without colons, and will be parsed as a WEP key. WEP keys can be 40-bit
1349 (5 bytes, or 10 hexadecimal characters), 104-bit, or occasionally 128-bit:
1351  a1:b2:c3:d4:e5
1353  0102030405060708090a0b0c0d
1355 wpa-pwd:: The password and SSID are used to create a raw pre-shared WPA key.
1356 The password can be between 8 and 63 characters, and the SSID can be up to
1357 32 bytes. (Typically both are printable ASCII, but that is not a hard
1358 limitation of the specification, only a recommendation.)
1360  MyPassword:MySSID
1362 You can optionally omit the colon and SSID, and Wireshark will try to decrypt
1363 packets using the last-seen SSID. This may not work for captures taken in busy
1364 environments, since the last-seen SSID may not be correct.
1366  MyPassword
1368 [NOTE]
1369 ====
1370 The WPA passphrase and SSID let you encode non-printable or otherwise troublesome
1371 characters using URI-style percent escapes, e.g., `%20` for a space. As a result
1372 you have to escape the percent characters themselves using `%25`. You also *must*
1373 escape colons in the passphrase or SSID themselves as `%3a`, in order to
1374 distinguish them from a colon as a separator between the passphrase and SSID.
1375 ====
1377 [WARNING]
1378 ====
1379 The WPA pass-phrase and SSID method is for WPA/WPA2-Personal only. It will
1380 not work for WPA3-Personal, which uses SAE (Simultaneous Authentication of
1381 Equals), nor for the Enterprise / 802.1X / EAP modes.
1382 ====
1384 wpa-psk:: The key must be provided as a hexadecimal string, and is parsed as a
1385 PSK (Pre-Shared Key) or PMK (Pairwise Master Key). For WPA/WPA2-Personal,
1386 the PSK and the PMK are identical, and directly derived from the passphrase
1387 and SSID above. The keys can be 256 bits (32 bytes, 64 hex characters) or
1388 384 bits (48 bytes, 96 hex characters).
1390  0102030405060708091011...6061626364
1392 tk:: The key must be provided as a hexadecimal string, and is parsed as a
1393 PTK (Pairwise Transient Key) or GTK (Group Temporal Key). The keys can
1394 be 16 or 32 bytes (128 or 256 bits), depending on the cipher suite used.
1395 (5 and 13 byte WEP TKs are not yet supported.)
1397 msk:: The key must be provided as a hexadecimal string, and is parsed as
1398 a MSK (Master Session Key). This is used for FT-EAP (IEEE 802.11r
1399 Fast BSS Transition with EAP authentication). The key can be 64 or 128
1400 bytes.
1402 .802.11 Decryption Key Examples
1403 image::images/ws-wireless-key-examples.png[{screenshot-attrs}]
1405 ////
1406 AirPcap was discontinued so this sections from the Wiki isn't relevant for many people currently.
1407 As of 2024-10-14 AirPcap code has been removed from master.
1408 ==== Adding Keys: Wireless Toolbar
1410 If you are using the Windows version of Wireshark and you have an [AirPcap](/AirPcap) adapter you can add decryption keys using the wireless toolbar. If the toolbar isn't visible, you can show it by selecting *View-\>Wireless Toolbar*. Click on the *Decryption Keys...* button on the toolbar:
1412 ![dot11-wireless-toolbar.png](uploads/__moin_import__/attachments/HowToDecrypt802.11/dot11-wireless-toolbar.png "dot11-wireless-toolbar.png")
1414 This will open the decryption key management window. As shown in the window you can select between three decryption modes: **None**, **Wireshark**, and **Driver**:
1416 ![dot11-key-management.png](uploads/__moin_import__/attachments/HowToDecrypt802.11/dot11-key-management.png "dot11-key-management.png")
1418 Selecting **None** disables decryption. Selecting **Wireshark** uses Wireshark's built-in decryption features. **Driver** will pass the keys on to the [AirPcap](/AirPcap) adapter so that 802.11 traffic is decrypted before it's passed on to Wireshark. Driver mode only supports WEP keys.
1419 ////
1421 ==== Gotchas
1423 Along with decryption keys there are other preference settings that affect decryption.
1425   - Make sure *Enable decryption* is selected.
1427   - You may have to toggle *Assume Packets Have FCS* and *Ignore the Protection bit* depending on how your 802.11 driver delivers frames.
1429 ===== Capturing the 4-way Handshake
1431 WPA and WPA2 use keys derived from an EAPOL handshake, which occurs when a machine joins a Wi-Fi network, to encrypt traffic. Unless **all four** handshake packets are present for the session you're trying to decrypt, Wireshark won't be able to decrypt the traffic. You can use the display filter **eapol** to locate EAPOL packets in your capture.
1433 In order to capture the handshake for a machine, you will need to force the machine to (re-)join the network while the capture is in progress. One way to do this is to put the machine to sleep (for smartphones and tablets, "turning off" the machine puts it to sleep) before you start the capture, start the capture, and then wake the machine up. You will need to do this for all machines whose traffic you want to see.
1435 If a TK is provided as a key, then the EAPOL 4-way handshake is not necessary,
1436 as the TK is what the handshake derives. However, all available TKs will be
1437 tried agi
1439 ===== Too Many Associations
1441 WPA and WPA2 use individual keys for each device. Wireshark is able to handle
1442 up to 256 active associations, which should be enough in most circumstances.
1443 Nevertheless, if a capture has too many devices and too many associations, then
1444 while the packet list may show all packets decoded on the first pass, randomly
1445 accessing different packets in the packet details will result in some packets
1446 failing to be properly deciphered.
1448 Filtering out only the relevant packets (e.g. with "wlan.addr") and saving into
1449 a new file should get decryption working in all cases, though it may require
1450 editing keys in the preferences or restarting Wireshark in order to free used
1451 associations. For the same reason, it is possible to be able to decode packets
1452 in a capture file without any EAPOL packets in it, as long as Wireshark did see
1453 the handshake for this communication in another capture without being
1454 restarted or editing keys. This can sometimes lead to exporting selected
1455 packets to a new file, opening that file and decoding seeming to work, but
1456 then decoding suddenly fail on the new file after Wireshark is restarted or keys
1457 are edited. If decoding suddenly stops working on a capture make sure the needed
1458 EAPOL packets are still in it.
1460 ===== WPA/WPA2 Enterprise/Rekeys
1462 As long as you can somehow extract the PMK from either the client or the Radius
1463 Server and configure the key (as PSK) all supported Wireshark versions will decode
1464 the traffic just fine up to the first EAPOL rekey.
1466 EAPoL rekey is often enabled for WPA/WPA2 enterprise and will change the used
1467 encryption key similar to the procedure for the initial connect, but it can also
1468 be configured and used for pre-shared (personal) mode.
1470 Decrypting IEEE 802.11r Fast BSS Transition roaming requires capturing
1471 reassociation frames for similar reasons, and is supported by recent
1472 Wireshark versions.
1474 ===== WPA3 Per-Connection Decryption
1476 In WPA3, a different PMK is used for each connection in order to achieve forward
1477 secrecy. Capturing the 4-way handshake and knowing the network password is not
1478 enough to decrypt packets; you must obtain the PMK from either the client or
1479 access point (typically by enabling logging in `wpa_supplicant` or `hostapd`
1480 with the `-d -K` flags) and use this as the decryption key in Wireshark. Even
1481 then, the decryption will only work for packets between that client and access
1482 point, not for all devices on that network.
1484 ===== TKs and Performance
1486 The TKs are the actual transient keys used to encrypt packets, which are derived
1487 during the handshake. If known, they can decrypt packets without having the
1488 handshake packets in a capture. However, having TKs as encryption keys in the
1489 table will affect IEEE 802.11 dissector performance as each encrypted
1490 packet will be tested against every TK until decryption is successful.
1491 If the table is configured with many TKs, none of which match any
1492 encrypted frame in the capture, performance can be slow.
1494 Once a match is found, an association is formed similar to in the usual
1495 method and decryption of other frames with the same key should be on
1496 par with normal decryption flow. Thus, if most frames in the capture
1497 match TKs (or other keys), and only a limited number of TKs are configured,
1498 the performance impact is slight.
1500 [#ChIKEv2DecryptionSection]
1502 === IKEv2 decryption table
1504 Wireshark can decrypt Encrypted Payloads of IKEv2 (Internet Key Exchange version
1505 2) packets if necessary information is provided. Note that you can decrypt only
1506 IKEv2 packets with this feature. If you want to decrypt IKEv1 packets or ESP
1507 packets, use Log Filename setting under ISAKMP protocol preference or settings
1508 under ESP protocol preference respectively.
1510 This is handled by a user table, as described in <<ChUserTable>>,
1511 with the following fields:
1513 Initiator’s SPI::
1514 Initiator’s SPI of the IKE_SA. This field takes hexadecimal string without
1515 “0x” prefix and the length must be 16 hex chars (represents 8 octets).
1517 Responder’s SPI::
1518 Responder’s SPI of the IKE_SA. This field takes hexadecimal string without
1519 “0x” prefix and the length must be 16 hex chars (represents 8 octets).
1521 SK_ei::
1522 Key used to encrypt/decrypt IKEv2 packets from initiator to responder. This
1523 field takes hexadecimal string without “0x” prefix and its length must meet
1524 the requirement of the encryption algorithm selected.
1527 SK_er::
1528 Key used to encrypt/decrypt IKEv2 packets from responder to initiator. This
1529 field takes hexadecimal string without “0x” prefix and its length must meet
1530 the requirement of the encryption algorithm selected.
1532 Encryption Algorithm::
1533 Encryption algorithm of the IKE_SA.
1535 $$SK_ai$$::
1536 Key used to calculate Integrity Checksum Data for IKEv2 packets from responder
1537 to initiator. This field takes hexadecimal string without “0x” prefix and its
1538 length must meet the requirement of the integrity algorithm selected.
1540 $$SK_ar$$::
1541 Key used to calculate Integrity Checksum Data for IKEv2 packets from initiator
1542 to responder. This field takes hexadecimal string without “0x” prefix and its
1543 length must meet the requirement of the integrity algorithm selected.
1545 Integrity Algorithm::
1546 Integrity algorithm of the IKE_SA.
1548 [#ChObjectIdentifiers]
1550 === Object Identifiers
1552 // This table appears under the BER dissector, perhaps it should be moved
1553 // to the "Name Resolution" preference section?
1555 Many protocols that use ASN.1 use Object Identifiers (OIDs) to uniquely identify
1556 certain pieces of information. In many cases, they are used in an extension
1557 mechanism so that new object identifiers (and associated values) may be defined
1558 without needing to change the base standard.
1560 While Wireshark has knowledge about many of the OIDs and the syntax of their
1561 associated values, the extensibility means that other values may be encountered.
1563 Wireshark uses this table to allow the user to define the name and syntax of
1564 Object Identifiers that Wireshark does not know about (for example, a privately
1565 defined X.400 extension). It also allows the user to override the name and
1566 syntax of Object Identifiers that Wireshark does know about (e.g., changing the
1567 name “id-at-countryName” to just “c”).
1569 This table is a user table, as described in <<ChUserTable>>, with the
1570 following fields:
1572 OID::
1573 The string representation of the Object Identifier e.g., “2.5.4.6”.
1575 Name::
1576 The name that should be displayed by Wireshark when the Object Identifier is
1577 dissected e.g., (“c”);
1579 Syntax::
1580 The syntax of the value associated with the Object Identifier. This must be one
1581 of the syntaxes that Wireshark already knows about (e.g., “PrintableString”).
1583 [#ChPresContextList]
1585 === PRES Users Context List
1587 Wireshark uses this table to map a presentation context identifier to a given
1588 object identifier when the capture does not contain a PRES package with a
1589 presentation context definition list for the conversation.
1591 This table is a user table, as described in <<ChUserTable>>, with the
1592 following fields:
1594 Context Id::
1595 An Integer representing the presentation context identifier for which this
1596 association is valid.
1598 Syntax Name OID::
1599 The object identifier representing the abstract syntax name, which defines the
1600 protocol that is carried over this association.
1602 [#ChSccpUsers]
1604 === SCCP users Table
1606 Wireshark uses this table to map specific protocols to a certain DPC/SSN
1607 combination for SCCP.
1609 This table is a user table, as described in <<ChUserTable>>, with the
1610 following fields:
1612 Network Indicator::
1613 An Integer representing the network indicator for which this association is
1614 valid.
1616 Called DPCs::
1617 A range of integers representing the dpcs for which this association is valid.
1619 Called SSNs::
1620 A range of integers representing the ssns for which this association is valid.
1622 User protocol::
1623 The protocol that is carried over this association
1625 [#ChSNMPSMIModules]
1627 === SMI (MIB and PIB) Modules
1629 If your copy of Wireshark supports libSMI, you can specify a list of MIB and PIB
1630 modules here. The COPS and SNMP dissectors can use them to resolve OIDs.
1632 Module name::
1633 The name of the module, e.g., IF-MIB.
1635 [#ChSNMPSMIPaths]
1637 === SMI (MIB and PIB) Paths
1639 If your copy of Wireshark supports libSMI, you can specify one or more paths to
1640 MIB and PIB modules here.
1642 Directory name::
1643 A module directory, e.g., `/usr/local/snmp/mibs`. Wireshark automatically uses
1644 the standard SMI path for your system, so you usually don’t have to add anything
1645 here.
1647 [#ChSNMPEnterpriseSpecificTrapTypes]
1649 === SNMP Enterprise Specific Trap Types
1651 Wireshark uses this table to map specific-trap values to user defined
1652 descriptions in a Trap PDU. The description is shown in the packet details
1653 specific-trap element.
1655 This table is a user table, as described in <<ChUserTable>>, with the
1656 following fields:
1658 Enterprise OID::
1659 The object identifier representing the object generating the trap.
1662 Trap Id::
1663 An Integer representing the specific-trap code.
1666 Description::
1667 The description to show in the packet details.
1669 [#ChSNMPUsersSection]
1671 === SNMP users Table
1673 Wireshark uses this table to verify authentication and to decrypt encrypted
1674 SNMPv3 packets.
1676 This table is a user table, as described in <<ChUserTable>>, with the
1677 following fields:
1679 Engine ID::
1680 If given this entry will be used only for packets whose engine id is this. This
1681 field takes a hexadecimal string in the form 0102030405.
1683 Username::
1684 This is the userName. When a single user has more than one password for
1685 different SNMP-engines the first entry to match both is taken, if you need a
1686 catch all engine-id (empty) that entry should be the last one.
1688 Authentication model::
1689 Which auth model to use (either “MD5”, “SHA1”, "SHA2-224", "SHA2-256", "SHA2-384" or "SHA2-512").
1691 Password::
1692 The authentication password. Use _\xDD_ for unprintable characters. A
1693 hexadecimal password must be entered as a sequence of _\xDD_ characters. For
1694 example, the hex password 010203040506 must be entered as
1695 _\x01\x02\x03\x04\x05\x06_. The _\_ character must be treated as an unprintable
1696 character, i.e., it must be entered as _\x5C_ or _\x5c_.
1698 Privacy protocol::
1699 Which encryption algorithm to use (either “DES”, “AES”, "AES192" or "AES256").
1701 Privacy password::
1702 The privacy password. Use _\xDD_ for unprintable characters. A hexadecimal
1703 password must be entered as a sequence of _\xDD_ characters. For example, the hex
1704 password 010203040506 must be entered as _\x01\x02\x03\x04\x05\x06_. The _\_
1705 character must be treated as an unprintable character, i.e., it must be entered
1706 as _\x5C_ or _\x5c_.
1708 Key expansion method::
1709 Which method to use to expand the key when the generated key provides too few bytes
1710 for the selected encryption method (either based on "draft-reeder-snmpv3-usm-3desede-00" or
1711 as implemented in AGENT++).
1713 [#ChK12ProtocolsSection]
1715 === Tektronix K12xx/15 RF5 protocols Table
1717 The Tektronix K12xx/15 rf5 file format uses helper files (*.stk) to identify the
1718 various protocols that are used by a certain interface. Wireshark doesn’t read
1719 these stk files, it uses a table that helps it identify which lowest layer
1720 protocol to use.
1722 Stk file to protocol matching is handled by a user table, as described
1723 in <<ChUserTable>>, with the following fields:
1725 Match string::
1726 A partial match for an stk filename, the first match wins, so if you have a
1727 specific case and a general one the specific one must appear first in the list.
1729 Protocol::
1730 This is the name of the encapsulating protocol (the lowest layer in the packet
1731 data) it can be either just the name of the protocol (e.g., mtp2, eth_withoutfcs,
1732 sscf-nni ) or the name of the encapsulation protocol and the “application”
1733 protocol over it separated by a colon (e.g., sscop:sscf-nni, sscop:alcap,
1734 sscop:nbap, ...)
1736 [#ChUserDLTsSection]
1738 === User DLTs dissector table
1740 When a pcap file uses one of the user DLTs (147 to 162) Wireshark uses this
1741 table to know which dissector(s) to use for each user DLT.
1743 This table is a user table, as described in <<ChUserTable>>, with the
1744 following fields:
1746 DLT::
1747 One of the user dlts.
1749 Payload dissector::
1750 This is the name of the payload dissector (the lowest layer in the packet data).
1751 (e.g., “eth_withfcs, "eth_withoutfcs”, and "eth_maybefcs" respectively for Ethernet frames that do, do not, or might possibly include the FCS at the end, “ip” for trying IPv4 then IPv6)
1753 Header size::
1754 If there is a header (before the payload) this tells which
1755 size this header is. A value of 0 disables the header dissector.
1757 Header dissector::
1758 The name of the header dissector to be used (uses “data” as default).
1760 Trailer size::
1761 If there is a trailer (after the payload) this tells which
1762 size this trailer is. A value of 0 disables the trailer dissector.
1764 Trailer dissector::
1765 The name of the trailer dissector to be used (uses “data” as default).
1767 [#ChProtobufSearchPaths]
1769 === Protobuf Search Paths
1772 https://developers.google.com/protocol-buffers/docs/encoding[binary wire format]
1773 of Protocol Buffers (Protobuf) messages are not self-described protocol. For
1774 example, the `varint` wire type in protobuf packet may be converted to int32, int64,
1775 uint32, uint64, sint32, sint64, bool or enum field types of
1776 https://developers.google.com/protocol-buffers/docs/proto3[protocol buffers language].
1777 Wireshark should be configured with Protocol Buffers language files (*.proto) to
1778 enable proper dissection of protobuf data (which may be payload of
1779 https://grpc.io/[gRPC]) based on the message, enum and field definitions.
1781 You can specify protobuf search paths at the Protobuf protocol preferences.
1782 For example, if you defined a proto file with path `d:/my_proto_files/helloworld.proto`
1783 and the `helloworld.proto` contains a line of `import "google/protobuf/any.proto";`
1784 because the `any` type of official protobuf library is used. And the real path of
1785 `any.proto` is `d:/protobuf-3.4.1/include/google/protobuf/any.proto`. You should
1786 add the `d:/protobuf-3.4.1/include/` and `d:/my_proto_files` paths into protobuf
1787 search paths.
1789 The configuration for the protobuf search paths is a user table, as described
1790 in <<ChUserTable>>, with the following fields:
1792 Protobuf source directory::
1793 This specifies a directory containing protobuf source files. For example,
1794 `d:/protobuf-3.4.1/include/` and `d:/my_proto_files` in Windows, or
1795 `/usr/include/` and `/home/alice/my_proto_files` in Linux/UNIX.
1797 Load all files::
1798 If this option is enabled, Wireshark will load all *.proto files in this directory
1799 and its subdirectories when Wireshark startup or protobuf search paths preferences
1800 changed. Note that the source directories that configured to protobuf official or third
1801 libraries path (like `d:/protobuf-3.4.1/include/`) should not be set to load all
1802 files, that may cause unnecessary memory use.
1804 [#ChProtobufUDPMessageTypes]
1806 === Protobuf UDP Message Types
1808 If the payload of UDP on certain ports is Protobuf encoding, Wireshark use this table
1809 to know which Protobuf message type should be used to parsing the data on the specified
1810 UDP port(s).
1812 The configuration for UDP Port(s) to Protobuf message type maps is a user table, as
1813 described in <<ChUserTable>>, with the following fields:
1815 UDP Ports::
1816 The range of UDP ports. The format may be "8000" or "8000,8008-8088,9080".
1818 Message Type::
1819 The Protobuf message type as which the data on the specified udp port(s) should be parsed.
1820 The message type is allowed to be empty, that means let Protobuf to dissect the data on
1821 specified UDP ports as normal wire type without precise definitions.
1823 Tips: You can create your own dissector to call Protobuf dissector. If your dissector is
1824 written in C language, you can pass the message type to Protobuf dissector by `data`
1825 parameter of call_dissector_with_data() function. If your dissector is written in Lua, you
1826 can pass the message type to Protobuf dissector by `pinfo.private["pb_msg_type"]`. The format
1827 of `data` and `pinfo.private["pb_msg_type"]` is
1829 ----
1830     "message," message_type_name
1831 ----
1833 For example:
1835 ----
1836     message,helloworld.HelloRequest
1837 ----
1839 the `helloworld` is package name, `HelloRequest` is message type.
1841 // End of WSUG Chapter Customizing