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
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
|
// WSUG Chapter Work
[#ChapterWork]
== Working With Captured Packets
[#ChWorkViewPacketsSection]
=== Viewing Packets You Have Captured
Once you have captured some packets or you have opened a previously saved
capture file, you can view the packets that are displayed in the packet list
pane by simply clicking on a packet in the packet list pane, which will bring up
the selected packet in the tree view and byte view panes.
You can then expand any part of the tree to view detailed information about each
protocol in each packet. Clicking on an item in the tree will highlight the
corresponding bytes in the byte view. An example with a TCP packet selected is
shown in <<ChWorkSelPack1>>. It also has the Acknowledgment number in the TCP
header selected, which shows up in the byte view as the selected bytes.
[#ChWorkSelPack1]
.Wireshark with a TCP packet selected for viewing
image::images/ws-packet-selected.png[{screenshot-attrs}]
You can also select and view packets the same way while Wireshark is capturing
if you selected “Update list of packets in real time” in the “Capture
Preferences” dialog box.
In addition you can view individual packets in a separate window as shown in
<<ChWorkPacketSepView>>. You can do this by double-clicking on an item in the
packet list or by selecting the packet in which you are interested in the packet
list pane and selecting menu:View[Show Packet in New Window]. This allows you to
easily compare two or more packets, even across multiple files.
[#ChWorkPacketSepView]
.Viewing a packet in a separate window
image::images/ws-packet-sep-win.png[{screenshot-attrs}]
Along with double-clicking the packet list and using the main menu there are a
number of other ways to open a new packet window:
- Hold down the shift key and double-click on a frame link in the packet
details.
- From <<PacketListPopupMenuTable>>.
- From <<PacketDetailsPopupMenuTable>>.
[#ChWorkDisplayPopUpSection]
=== Pop-up Menus
You can open a pop-up menu over the “Packet List”, its column heading,
“Packet Details”, or “Packet Bytes” by clicking your right mouse button
on the corresponding item.
[#ChWorkColumnHeaderPopUpMenuSection]
==== Pop-up Menu Of The “Packet List” Column Header
[#ChWorkColumnHeaderPopUpMenu]
.Pop-up menu of the “Packet List” column header
image::images/ws-column-header-popup-menu.png[{screenshot-attrs}]
The following table gives an overview of which functions are available
in this header, where to find the corresponding function in the main
menu, and a description of each item.
[#ColumnHeaderPopupMenuTable]
.The menu items of the “Packet List” column header pop-up menu
[options="header",cols="3,7"]
|===
|Item |Description
|menu:Align Left[] |
Left-align values in this column.
|menu:Align Center[] |
Center-align values in this column.
|menu:Align Right[] |
Right-align values in this column.
|menu:Column Preferences...[] |
Open the “Preferences” dialog for this column.
|menu:Edit Column[] |
Open the column editor toolbar for this column.
|menu:Resize To Contents[] |
Resize the column to fit its values.
|menu:Resolve Names[] |
If this column contains addresses, resolve them.
| _No., Time, Source, et al._ |
Show or hide a column by selecting its item.
|menu:Remove Column[] |
Remove this column, similar to deleting it in the “Preferences” dialog.
|===
[#ChWorkPacketListPanePopUpMenuSection]
==== Pop-up Menu Of The “Packet List” Pane
[#ChWorkPacketListPanePopUpMenu]
.Pop-up menu of the “Packet List” pane
image::images/ws-packet-pane-popup-menu.png[{screenshot-attrs}]
The following table gives an overview of which functions are available
in this pane, where to find the corresponding function in the main menu,
and a short description of each item.
[#PacketListPopupMenuTable]
.The menu items of the “Packet List” pop-up menu
[options="header",cols="3,1,6"]
|===
|Item |Corresponding main menu item |Description
|menu:Mark Packet (toggle)[]|menu:Edit[]| Mark or unmark a packet.
|menu:Ignore Packet (toggle)[]|menu:Edit[]| Ignore or inspect this packet while dissecting the capture file.
|menu:Set Time Reference (toggle)[]|menu:Edit[]| Set or reset a time reference.
|menu:Time Shift[] |menu:Edit[] |
Opens the “Time Shift” dialog, which allows you to adjust the timestamps
of some or all packets.
|menu:Packet Comment...[] |menu:Edit[] |
Opens the “Packet Comment” dialog, which lets you add a comment to a
single packet. Note that the ability to save packet comments depends on
your file format. E.g., pcapng supports comments, pcap does not.
|menu:Edit Resolved Name[]||
Allows you to enter a name to resolve for the selected address.
|menu:Apply as Filter[]|menu:Analyze[]|
Immediately replace or append the current display filter based on the most recent packet list or packet details item selected.
The first submenu item shows the filter and subsequent items show the different ways that the filter can be applied.
|menu:Prepare as Filter[]|menu:Analyze[]|
Change the current display filter based on the most recent packet list or packet details item selected, but don't apply it.
The first submenu item shows the filter and subsequent items show the different ways that the filter can be changed.
// XXX - add a new section describing this better.
|menu:Conversation Filter[] ||
Apply a display filter with the address information from the selected packet.
For example, the IP menu entry will set a filter to show the traffic between the two IP addresses of the current packet.
|menu:Colorize Conversation[] ||
Create a new colorizing rule based on address information from the selected packet.
|menu:SCTP[] ||
Allows you to analyze and prepare a filter for this SCTP association.
|menu:Follow[TCP Stream] |menu:Analyze[] |
Open a window that displays all the TCP segments captured that are on the same TCP connection as a selected packet.
See <<ChAdvFollowStreamSection>>.
|menu:Follow[UDP Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for UDP “streams”.
|menu:Follow[DCCP Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for DCCP streams.
|menu:Follow[TLS Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for TLS or SSL streams.
See the wiki page on link:{wireshark-wiki-url}SSL[SSL] for instructions
on providing TLS keys.
|menu:Follow[HTTP Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for HTTP streams.
|menu:Copy[Summary as Text] ||
Copy the summary fields as displayed to the clipboard as tab-separated
text.
|menu:Copy[...as CSV] ||
Copy the summary fields as displayed to the clipboard as comma-separated
text.
|menu:Copy[...as YAML] ||
Copy the summary fields as displayed to the clipboard as YAML data.
|menu:Copy[As Filter] ||
Prepare a display filter based on the currently selected item and copy
that filter to the clipboard.
|menu:Copy[Bytes as Hex + ASCII Dump] ||
Copy the packet bytes to the clipboard in full “hexdump” format.
|menu:Copy[...as Hex Dump] ||
Copy the packet bytes to the clipboard in “hexdump” format without the
ASCII portion.
|menu:Copy[...as Printable Text] ||
Copy the packet bytes to the clipboard as ASCII text, excluding
non-printable characters.
|menu:Copy[...as a Hex Stream] ||
Copy the packet bytes to the clipboard as an unpunctuated list of hex
digits.
|menu:Copy[...as Raw Binary] ||
Copy the packet bytes to the clipboard as raw binary. The data is stored
in the clipboard using the MIME type “application/octet-stream”.
|menu:Protocol Preferences[] ||
Adjust the preferences for the selected protocol.
|menu:Decode As...[] |menu:Analyze[] |
Change or apply a new relation between two dissectors.
|menu:Show Packet in New Window[] |menu:View[] |
Shows the selected packet in a separate window. The separate window
shows only the packet details and bytes. See <<ChWorkPacketSepView>> for
details.
|===
[#ChWorkPacketDetailsPanePopUpMenuSection]
==== Pop-up Menu Of The “Packet Details” Pane
[#ChWorkPacketDetailsPanePopUpMenu]
.Pop-up menu of the “Packet Details” pane
image::images/ws-details-pane-popup-menu.png[{screenshot-attrs}]
The following table gives an overview of which functions are available in this
pane, where to find the corresponding function in the main menu, and a short
description of each item.
[#PacketDetailsPopupMenuTable]
.The menu items of the “Packet Details” pop-up menu
[options="header",cols="3,1,6"]
|===
|Item |Corresponding main menu item |Description
|menu:Expand Subtrees[]|menu:View[]| Expand the currently selected subtree.
|menu:Collapse Subtrees[]|menu:View[]| Collapse the currently selected subtree.
|menu:Expand All[]|menu:View[]| Expand all subtrees in all packets in the capture.
|menu:Collapse All[]|menu:View[]| Wireshark keeps a list of all the protocol subtrees that are expanded, and uses it to ensure that the correct subtrees are expanded when you display a packet. This menu item collapses the tree view of all packets in the capture list.
|menu:Edit Resolved Name[]|menu:View[]| Allows you to enter a name to resolve for the selected address.
|menu:Apply as Column[]|| Use the selected protocol item to create a new column in the packet list.
|menu:Apply as Filter[]|menu:Analyze[]|
Immediately replace or append the current display filter based on the most recent packet list or packet details item selected.
The first submenu item shows the filter and subsequent items show the different ways that the filter can be applied.
|menu:Prepare as Filter[]|menu:Analyze[]|
Change the current display filter based on the most recent packet list or packet details item selected, but don't apply it.
The first submenu item shows the filter and subsequent items show the different ways that the filter can be changed.
|menu:Colorize with Filter[]|| This menu item uses a display filter with the information from the selected protocol item to build a new colorizing rule.
|menu:Follow[TCP Stream] |menu:Analyze[] |
Open a window that displays all the TCP segments captured that are on the same TCP connection as a selected packet.
See <<ChAdvFollowStreamSection>>.
|menu:Follow[UDP Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for UDP “streams”.
|menu:Follow[TLS Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for TLS or SSL streams.
See the wiki page on link:{wireshark-wiki-url}SSL[SSL] for instructions
on providing TLS keys.
|menu:Follow[HTTP Stream] |menu:Analyze[] |
Same functionality as “Follow TCP Stream” but for HTTP streams.
|menu:Copy[All Visible Items] |menu:Edit[] |
Copy the packet details as displayed.
|menu:Copy[All Visible Selected Tree Items] |menu:Edit[] |
Copy the selected packet detail and its children as displayed.
|menu:Copy[Description] |menu:Edit[] |
Copy the displayed text of the selected field to the system clipboard.
|menu:Copy[Fieldname] |menu:Edit[] |
Copy the name of the selected field to the system clipboard.
|menu:Copy[Value] |menu:Edit[] |
Copy the value of the selected field to the system clipboard.
|menu:Copy[As Filter]| menu:Edit[] |
Prepare a display filter based on the currently selected item and copy
it to the clipboard.
|menu:Copy[Bytes as Hex + ASCII Dump] ||
Copy the packet bytes to the clipboard in full “hexdump” format.
|menu:Copy[...as Hex Dump] ||
Copy the packet bytes to the clipboard in “hexdump” format without the
ASCII portion.
|menu:Copy[...as Printable Text] ||
Copy the packet bytes to the clipboard as ASCII text, excluding
non-printable characters.
|menu:Copy[...as a Hex Stream] ||
Copy the packet bytes to the clipboard as an unpunctuated list of hex
digits.
|menu:Copy[...as Raw Binary] ||
Copy the packet bytes to the clipboard as raw binary. The data is stored
in the clipboard using the MIME type “application/octet-stream”.
|menu:Copy[...as Escaped String] ||
Copy the packet bytes to the clipboard as C-style escape sequences.
|menu:Export Packet Bytes...[] |menu:File[] |
This menu item is the same as the File menu item of the same name. It
allows you to export raw packet bytes to a binary file.
|menu:Wiki Protocol Page[]|| Open the wiki page for the selected protocol in your web browser.
|menu:Filter Field Reference[]|| Open the filter field reference web page for the selected protocol in your web browser.
|menu:Protocol Preferences[] ||
Adjust the preferences for the selected protocol.
|menu:Decode As...[]|menu:Analyze[]| Change or apply a new relation between two dissectors.
|menu:Go to Linked Packet[] |menu:Go[] |
If the selected field has a corresponding packet such as the matching
request for a DNS response, go to it.
|menu:Show Linked Packet in New Window[] |menu:Go[] |
If the selected field has a corresponding packet such as the matching
request for a DNS response, show the selected packet in a separate
window. See <<ChWorkPacketSepView>> for details.
|===
[#ChWorkPacketBytesPanePopUpMenuSection]
==== Pop-up Menu Of The “Packet Bytes” Pane
[#ChWorkPacketBytesPanePopUpMenu]
.Pop-up menu of the “Packet Bytes” pane
image::images/ws-bytes-pane-popup-menu.png[{screenshot-attrs}]
The following table gives an overview of which functions are available
in this pane along with a short description of each item.
[#PacketBytesPopupMenuTable]
.The menu items of the “Packet Bytes” pop-up menu
[options="header",cols="3,7"]
|===
|Item |Description
|menu:Copy Bytes as Hex + ASCII Dump[] |
Copy the packet bytes to the clipboard in full “hexdump” format.
|menu:...as Hex Dump[] |
Copy the packet bytes to the clipboard in “hexdump” format without the
ASCII portion.
|menu:...as Printable Text[] |
Copy the packet bytes to the clipboard as ASCII text, excluding
non-printable characters.
|menu:...as a Hex Stream[] |
Copy the packet bytes to the clipboard as an unpunctuated list of hex
digits.
|menu:...as Raw Binary[] |
Copy the packet bytes to the clipboard as raw binary. The data is stored
in the clipboard using the MIME type “application/octet-stream”.
|menu:...as Escaped String[] |
Copy the packet bytes to the clipboard as C-style escape sequences.
|menu:Show bytes as hexadecimal[] |
Display the byte data as hexadecimal digits.
|menu:Show bytes as bits[] |
Display the byte data as binary digits.
|menu:Show text based on packet[] |
Show the “hexdump” data with text.
|menu:...as ASCII[] |
Use ASCII encoding when displaying “hexdump” text.
|menu:...as EBCDIC[] |
Use EBCDIC encoding when displaying “hexdump” text.
|===
[#ChWorkPacketDiagramPanePopUpMenuSection]
==== Pop-up Menu Of The “Packet Diagram” Pane
[#ChWorkPacketDiagramPanePopUpMenu]
.Pop-up menu of the “Packet Diagram” pane
image::images/ws-diagram-pane-popup-menu.png[{screenshot-attrs}]
The following table gives an overview of which functions are available
in this pane along with a short description of each item.
[#PacketDiagramPopupMenuTable]
.The menu items of the “Packet Diagram” pop-up menu
[options="header",cols="3,7"]
|===
|Item |Description
|menu:Show Field Values[] |
Display current value for each field on the packet diagram.
|menu:Save Diagram As...[] |
Save the packet diagram to an image file (PNG, BMP, JPEG).
|menu:Copy as Raster Image[] |
Copy the packet diagram to the clipboard in raster (ARGB32) format.
// |menu:…as SVG[] |
// (macOS) Copy the packet diagram to the clipboard in SVG format.
|===
[#ChWorkDisplayFilterSection]
=== Filtering Packets While Viewing
Wireshark has two filtering languages: _capture filters_ and _display filters_.
_Capture filters_ are used for filtering
when capturing packets and are discussed in <<ChCapCaptureFilterSection>>.
_Display filters_ are used for filtering
which packets are displayed and are discussed below.
For more information about _display filter_ syntax, see the
link:{wireshark-man-page-url}wireshark-filter.html[wireshark-filter(4)] man page.
Display filters allow you to concentrate on the packets you are interested in
while hiding the currently uninteresting ones. They allow you to only display packets
based on:
* Protocol
* The presence of a field
* The values of fields
* A comparison between fields
* ... and a lot more!
To only display packets containing a particular protocol, type the protocol name
in the display filter toolbar of the Wireshark
window and press enter to apply the filter. <<ChWorkTCPFilter>> shows an
example of what happens when you type _tcp_ in the display filter toolbar.
[NOTE]
====
Protocol and field names are usually in lowercase.
====
[NOTE]
====
Don’t forget to press enter or click on the apply display filter button after entering the filter
expression.
====
[#ChWorkTCPFilter]
.Filtering on the TCP protocol
image::images/ws-display-filter-tcp.png[{screenshot-attrs}]
As you may have noticed, only packets containing the TCP protocol are now displayed,
so packets 1-10 are hidden and packet number 11
is the first packet displayed.
[NOTE]
====
When using a display filter, all packets remain in the capture file. The display
filter only changes the display of the capture file but not its content!
====
To remove the filter, click on the btn:[Clear] button to the right of the
display filter field. All packets will become visible again.
Display filters can be very powerful and are discussed in further detail in
<<ChWorkBuildDisplayFilterSection>>
It's also possible to create display filters with the
_Display Filter Expression_ dialog box. More information about
the _Display Filter Expression_ dialog box is available in
<<ChWorkFilterAddExpressionSection>>.
[#ChWorkBuildDisplayFilterSection]
=== Building Display Filter Expressions
Wireshark provides a display filter language that enables you
to precisely control which packets are displayed. They can be used
to check for the presence of a protocol or field, the value of a field, or
even compare two fields to each other. These comparisons can be combined
with logical operators, like "and" and "or", and parentheses
into complex expressions.
The following sections will go into the display filter functionality in
more detail.
[TIP]
====
There are many display filter examples on the _Wireshark Wiki Display
Filter page_ at: link:{wireshark-wiki-url}DisplayFilters[].
====
==== Display Filter Fields
The simplest display filter is one that displays a single protocol.
To only display packets containing a particular protocol, type the protocol
into Wireshark's display filter toolbar. For example, to only
display TCP packets, type _tcp_ into Wireshark's display filter toolbar.
Similarly, to only display
packets containing a particular field, type the field
into Wireshark's display filter toolbar. For example, to only display
HTTP requests, type _http.request_ into Wireshark's display filter toolbar.
You can filter on any protocol that Wireshark supports. You can
also filter on any field that a dissector adds to the tree view, if the dissector
has added an abbreviation for that field. A full list of the available protocols
and fields is available through the menu item
menu:View[Internals,Supported Protocols].
// XXX - add some more info here and a link to the statusbar info.
==== Comparing Values
You can build display filters that compare values using a number of different
comparison operators. For example, to only display packets to or
from the IP address 192.168.0.1, use `ip.addr==192.168.0.1`.
A complete list of available comparison operators is shown in <<DispCompOps>>.
[TIP]
====
English and C-like operators are interchangeable and can be mixed within a filter string.
====
[#DispCompOps]
.Display Filter comparison operators
[options="header",cols="1,1,1,3,3"]
|===
| English | Alias | C-like | Description | Example
| eq | any_eq | == | Equal (any if more than one) | `ip.src == 10.0.0.5`
| ne | all_ne | != | Not equal (all if more than one) | `ip.src != 10.0.0.5`
| | all_eq | === | Equal (all if more than one) | `ip.src === 10.0.0.5`
| | any_ne | !== | Not equal (any if more than one) | `ip.src !== 10.0.0.5`
| gt | | > | Greater than | `frame.len > 10`
| lt | | < | Less than | `frame.len < 128`
| ge | | >= | Greater than or equal to | `frame.len ge 0x100`
| le | | \<= | Less than or equal to | `frame.len \<= 0x20`
| contains | | | Protocol, field or slice contains a value | `sip.To contains "a1762"`
| matches | | ~ | Protocol or text field matches a Perl-compatible regular expression| `http.host matches "acme\\.(org\|com\|net)"`
|===
[NOTE]
====
The meaning of != (all not equal) was changed in Wireshark 3.6.
Before it used to mean "any not equal".
====
All protocol fields have a type. <<ChWorkFieldTypes>> provides a list
of the types with examples of how to use them in display filters.
[#ChWorkFieldTypes]
===== Display Filter Field Types
Unsigned integer::
Can be 8, 16, 24, 32, or 64 bits. You can express integers in decimal, octal,
hexadecimal or binary. The following display filters are equivalent:
+
`ip.len le 1500`
+
`ip.len le 02734`
+
`ip.len le 0x5dc`
+
`ip.len le 0b10111011100`
Signed integer::
Can be 8, 16, 24, 32, or 64 bits. As with unsigned integers you can use
decimal, octal, hexadecimal or binary.
Boolean::
Can be 1 or "True", 0 or "False" (without quotes).
+
A Boolean field is present regardless if its value is true or false. For example,
`tcp.flags.syn` is present in all TCP packets containing the flag, whether
the SYN flag is 0 or 1. To only match TCP packets with the SYN flag set, you need
to use `tcp.flags.syn == 1` or `tcp.flags.syn == True`.
Ethernet address::
6 bytes separated by a colon (:), dot (.), or dash (-) with one or two bytes between separators:
+
`eth.dst == ff:ff:ff:ff:ff:ff`
+
`eth.dst == ff-ff-ff-ff-ff-ff`
+
`eth.dst == ffff.ffff.ffff`
IPv4 address::
`ip.addr == 192.168.0.1`
+
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`
IPv6 address::
`ipv6.addr == ::1`
+
As with IPv4 addresses, IPv6 addresses can match a subnet.
Text string::
`http.request.uri == "https://www.wireshark.org/"`
+
Strings are a sequence of bytes. Functions like `lower()` use ASCII, otherwise
no particular encoding is assumed. String literals are specified with double
quotes. Characters can also be specified using a byte escape sequence using
hex \x__hh__ or octal {backslash}__ddd__, where _h_ and _d_ are hex and octal
numerical digits respectively:
+
`dns.qry.name contains "www.\x77\x69\x72\x65\x73\x68\x61\x72\x6b.org"`
+
Alternatively, a raw string syntax can be used. Such strings are prefixed with `r` or `R` and treat
backslash as a literal character.
+
`http.user_agent matches r"\(X11;"`
Date and time::
`frame.time == "Sep 26, 2004 23:18:04.954975"`
+
`ntp.xmt ge "2020-07-04 12:34:56"`
+
The value of an absolute time field is expressed as a string, using one of the
two formats above. Fractional seconds can be omitted or specified up to
nanosecond precision; extra trailing zeros are allowed but not other digits.
The string cannot take a time zone suffix, and is always parsed as in the local
time zone, even for fields that are displayed in UTC.
+
In the first format, the abbreviated month names must be in English regardless
of locale. In the second format, any number of time fields may be omitted, in
the order from least significant (seconds) to most, but at least the entire
date must be specified:
+
`frame.time < "2022-01-01"`
+
In the second format, a `T` may appear between the date and time as in
ISO 8601, but not when less significant times are dropped.
[#ChWorkFilterExamples]
===== Some Examples
----
udp contains 81:60:03
----
The display filter above matches packets that contains the 3-byte sequence 0x81, 0x60,
0x03 anywhere in the UDP header or payload.
----
sip.To contains "a1762"
----
The display filter above matches packets where the SIP To-header contains the string "a1762"
anywhere in the header.
----
http.host matches "acme\\.(org|com|net)"
----
The display filter above matches HTTP packets where the HOST header contains
acme.org, acme.com, or acme.net.
Comparisons are case-insensitive.
----
tcp.flags & 0x02
----
That display filter will match all packets that contain the “tcp.flags” field with the 0x02 bit,
i.e., the SYN bit, set.
===== Possible Pitfalls Using Regular Expressions
String literals containing regular expressions are parsed twice. Once by Wireshark's display
filter engine and again by the PCRE2 library. It's important to keep this in mind when using
the "matches" operator with regex escape sequences and special characters.
For example, the filter expression `+frame matches "AB\x43"+` uses the string `+"ABC"+` as input
pattern to PCRE. However, the expression `+frame matches "AB\\x43"+` uses the string `+"AB\x43"+`
as the pattern. In this case both expressions give the same result because Wireshark and PCRE
both support the same byte escape sequence (0x43 is the ASCII hex code for `C`).
An example where this fails badly is `+foo matches "bar\x28"+`. Because 0x28 is the ASCII
code for `(` the pattern input to PCRE is `+"bar("+`. This regular expression is syntactically
invalid (missing closing parenthesis). To match a literal parenthesis in a display filter regular
expression it must be escaped (twice) with backslashes.
TIP: Using raw strings avoids most problem with the "matches" operator and double escape requirements.
==== Combining Expressions
You can combine filter expressions in Wireshark using the logical operators shown in <<FiltLogOps>>
[#FiltLogOps]
.Display Filter Logical Operations
[options="header",cols="1,1,1,4"]
|===
|English |C-like |Description | Example
|and |&&| Logical AND | `ip.src==10.0.0.5 and tcp.flags.fin`
|or |\|\| | Logical OR | `ip.src==10.0.0.5 or ip.src==192.1.1.1`
|xor |^^ | Logical XOR | `tr.dst[0:3] == 0.6.29 xor tr.src[0:3] == 0.6.29`
|not |! | Logical NOT | `not llc`
|[...] | | Subsequence | See “Slice Operator” below.
|in | | Set Membership| http.request.method in {"HEAD", "GET"}. See “Membership Operator” below.
|===
==== Slice Operator
Wireshark allows you to select a subsequence of byte arrays (including
protocols) or text strings in rather elaborate ways. After a label you can
place a pair of brackets [] containing a comma separated list of range
specifiers.
----
eth.src[0:3] == 00:00:83
----
The example above uses the n:m format to specify a single range. In this case n
is the beginning offset and m is the length of the range being specified.
----
eth.src[1-2] == 00:83
----
The example above uses the n-m format to specify a single range. In this case n
is the beginning offset and m is the ending offset.
----
eth.src[:4] == 00:00:83:00
----
The example above uses the :m format, which takes everything from the beginning
of a sequence to offset m. It is equivalent to 0:m
----
eth.src[4:] == 20:20
----
The example above uses the n: format, which takes everything from offset n to
the end of the sequence.
----
eth.src[2] == 83
----
The example above uses the n format to specify a single range. In this case the
element in the sequence at offset n is selected. This is equivalent to n:1.
----
eth.src[0:3,1-2,:4,4:,2] ==
00:00:83:00:83:00:00:83:00:20:20:83
----
Wireshark allows you to string together single ranges in a comma separated list
to form compound ranges as shown above.
You can use the slice operator on a protocol name, too, to slice the
bytes associated with that protocol. The `+frame+` protocol can be useful,
encompassing all the captured data (not including secondary data sources
like decrypted data.)
Offsets can be negative, indicating an offset from the end of a field.
----
frame[-4:4] == 0.1.2.3
frame[-4] == 0.1.2.3
----
The two examples above both check the last four bytes of a frame.
Slices of string fields yield strings, and are indexed on codepoint
boundaries after conversation of the string to UTF-8, not bytes.
----
http.content_type[0:4] == "text"
smpp.message_text[:10] == "Абвгдеёжзи"
----
The second example above will match regardless of whether the original
string was in Windows-1251, UTF-8, or UTF-16, so long as the converted
string starts with those ten characters.
Byte slices can be directly compared to strings; this converts the
string to the corresponding UTF-8 byte sequence. To compare string
slices with byte sequences, use the @ operator, below.
==== The Layer Operator
A field can be restricted to a certain layer in the protocol stack using the
layer operator (#), followed by a decimal number:
ip.addr#2 == 192.168.30.40
matches only the inner (second) layer in the packet.
Layers use simple stacking semantics and protocol layers are counted sequentially starting from 1.
For example, in a packet that contains two IPv4 headers, the outer (first) source address can be matched with "ip.src#1" and the inner (second) source address can be matched with "ip.src#2".
For more complicated ranges the same syntax used with slices is valid:
tcp.port#[2-4]
means layers number 2, 3 or 4 inclusive. The hash symbol is required to
distinguish a layer range from a slice.
==== The At Operator
By prefixing the field name with an at sign (@) the comparison is done against
the raw packet data for the field.
A character string must be decoded from a source encoding during dissection.
If there are decoding errors the resulting string will usually contain
replacement characters:
[subs="replacements"]
----
browser.comment == "string is ����"
----
The at operator allows testing the raw undecoded data:
----
@browser.comment == 73:74:72:69:6e:67:20:69:73:20:aa:aa:aa:aa
----
The syntactical rules for a bytes field type apply to the second example.
[NOTE]
====
When a bytes field is compared with a literal string, it is compared
with the UTF-8 representation of that string. The at operator compares
a string field with the actual byte representation in the original encoding,
which may not be UTF-8.
As an example, SMPP has a bytes field, `+smpp.message+`, and a string
field, `+smpp.message_text+`, that refer to the same data. If the
first four characters of the message is the string "Text" in the UTF-16
encoding, the following filters all match.
----
smpp.message[:8] == 00:54:00:65:00:73:00:74
smpp.message[:8] == "\x00T\x00e\x00s\x00t"
smpp.message_text[:4] == "Test"
smpp.message_text[:4] == "\x54\x65\x73\x74"
@smpp.message_text[:8] == 00:54:00:65:00:73:00:74
@smpp.message_text[:8] == "\x00T\x00e\x00s\x00t"
----
The following filters do *NOT* match.
----
@smpp.message_text[:4] == "\x00T\x00e\x00s\x00t"
smpp.message[:4] == "Test"
smpp.message[:8] == "Test"
@smpp.message_text[:4] == "Test"
@smpp.message_text[:8] == "Test"
----
The first filter above does not match because of operator precedence
left-to-right; `+@smpp.message_text` is converted to bytes before the
slice operator is applied, so the length of the necessary slice is 8.
The other filters do not match because the literal string "Test" is
always converted to its 4 octet UTF-8 representation when comparing
against bytes, and it does not match the UTF-16 representation of
the field bytes.
====
==== Membership Operator
Wireshark allows you to test a field for membership in a set of values or
fields. After the field name, use the `in` operator followed by the set items
surrounded by braces {}. For example, to display packets with a TCP source or
destination port of 80, 443, or 8080, you can use `tcp.port in {80, 443, 8080}`.
Set elements must be separated by commas.
The set of values can also contain ranges: `tcp.port in {443,4430..4434}`.
[NOTE]
====
The display filter
----
tcp.port in {80, 443, 8080}
----
is equivalent to
----
tcp.port == 80 || tcp.port == 443 || tcp.port == 8080
----
However, the display filter
----
tcp.port in {443, 4430..4434}
----
is not equivalent to
----
tcp.port == 443 || (tcp.port >= 4430 && tcp.port <= 4434)
----
This is because comparison operators are satisfied when _any_ field
matches the filter, so a packet with a source port of 56789 and
destination port of port 80 would also match the second filter
since `56789 >= 4430 && 80 \<= 4434` is true. In contrast, the
membership operator tests a single field against the range condition.
====
Sets are not just limited to numbers, other types can be used as well:
----
http.request.method in {"HEAD", "GET"}
ip.addr in {10.0.0.5 .. 10.0.0.9, 192.168.1.1..192.168.1.9}
frame.time_delta in {10 .. 10.5}
----
==== Arithmetic operators
You can perform the arithmetic operations on numeric fields shown in <<ArithmeticOps>>
[#ArithmeticOps]
.Display Filter Arithmetic Operations
[options="header",cols="1,1,4"]
|===
|Name |Syntax | Description
|Unary minus |-A | Negation of A
|Addition |A + B | Add B to A
|Subtraction |A - B | Subtract B from A
|Multiplication |A * B | Multiply A times B
|Division |A / B | Divide A by B
|Modulo |A % B | Remainder of A divided by B
|Bitwise AND |A & B | Bitwise AND of A and B
|===
An unfortunate quirk in the filter syntax is that the subtraction
operator must be preceded by a space character, so "A-B" must be
written as "A -B" or "A - B".
Arithmetic expressions can be grouped using curly braces.
For example, frames where capture length resulted in truncated TCP options:
----
frame.cap_len < { 14 + ip.hdr_len + tcp.hdr_len }
----
==== Functions
The display filter language has a number of functions to convert fields, see
<<DispFunctions>>.
[#DispFunctions]
.Display Filter Functions
[options="header",cols="1,4"]
|===
|Function|Description
|upper |Converts a string field to uppercase.
|lower |Converts a string field to lowercase.
|len |Returns the byte length of a string or bytes field.
|count |Returns the number of field occurrences in a frame.
|string |Converts a non-string field to a string.
|max |Return the maximum value for the arguments.
|min |Return the minimum value for the arguments.
|abs |Return the absolute value for the argument.
|===
The `upper` and `lower` functions can used to force case-insensitive matches:
`lower(http.server) contains "apache"`.
To find HTTP requests with long request URIs: `len(http.request.uri) > 100`.
Note that the `len` function yields the string length in bytes rather than
(multi-byte) characters.
Usually an IP frame has only two addresses (source and destination), but in case
of ICMP errors or tunneling, a single packet might contain even more addresses.
These packets can be found with `count(ip.addr) > 2`.
The `string` function converts a field value to a string, suitable for use with operators
like "matches" or "contains". Integer fields are converted to their decimal representation.
It can be used with IP/Ethernet addresses (as well as others), but not with string or
byte fields.
For example, to match odd frame numbers:
----
string(frame.number) matches "[13579]$"
----
To match IP addresses ending in 255 in a block of subnets (172.16 to 172.31):
----
string(ip.dst) matches r"^172\.(1[6-9]|2[0-9]|3[0-1])\.[0-9]{1,3}\.255"
----
The functions max() and min() take any number of arguments of the same type
and returns the largest/smallest respectively of the set.
----
max(tcp.srcport, tcp.dstport) <= 1024
----
==== Field References
An expression of the form ${some.proto.field} is called a field reference.
Its value is read from the corresponding field in the currently selected
field in the GUI. This is a powerful way to build dynamic filters, such
as frames since the last five minutes to the selected frame:
----
frame.time_relative >= ${frame.time_relative} - 300
----
or all HTTP packets whose `+ip.dst` value equals the "A" record of
the DNS response in the current frame:
----
http && ip.dst eq ${dns.a}
----
The notation of field references is similar to that of
<<ChDisplayFilterMacrosSection,macros>> but they are syntactically
distinct. Field references, like other complex filters, make excellent
use cases for <<ChWorkDefineFilterMacrosSection,macros>>,
<<ChWorkDefineFilterSection,saved filters>>, and
<<ChCustFilterButtons,filter buttons>>
[#ChWorkBuildDisplayFilterTransitional]
==== Sometimes Fields Change Names
As protocols evolve they sometimes change names or are superseded by
newer standards. For example, DHCP extends and has largely replaced
BOOTP and TLS has replaced SSL. If a protocol dissector originally used
the older names and fields for a protocol the Wireshark development team
might update it to use the newer names and fields. In such cases they
will add an alias from the old protocol name to the new one in order to
make the transition easier.
For example, the DHCP dissector was originally developed for the BOOTP
protocol but as of Wireshark 3.0 all of the “bootp” display filter
fields have been renamed to their “dhcp” equivalents. You can still use
the old filter names for the time being, e.g., “bootp.type” is equivalent
to “dhcp.type” but Wireshark will show the warning “"bootp" is deprecated”
when you use it. Support for the deprecated fields may be removed in the future.
==== Some protocol names can be ambiguous
In some particular cases relational expressions (equal, less than, etc.)
can be ambiguous. The filter name of a protocol or protocol field can contain
any letter and digit in any order, possibly separated by dots. That can be
indistinguishable from a literal value (usually numerical values in hexadecimal).
For example the semantic value of `fc` can be the protocol Fibre Channel or the
number 0xFC in hexadecimal because the 0x prefix is optional for hexadecimal numbers.
Any value that matches a registered protocol or protocol field filter name is
interpreted semantically as such. If it doesn't match a protocol name the normal
rules for parsing literal values apply.
So in the case of 'fc' the lexical token is interpreted as "Fibre Channel" and
not 0xFC. In the case of 'fd' it would be interpreted as 0xFD because it is a
well-formed hexadecimal literal value (according to the rules of display filter
language syntax) and there is no protocol registered with the filter name 'fd'.
How ambiguous values are interpreted may change in the future. To avoid this
problem and resolve the ambiguity there is additional syntax available.
Values prefixed with a dot are always treated as a protocol name. The
dot stands for the root of the protocol namespace and is optional). Values
prefixed with a colon are always interpreted as a byte array.
----
frame[10:] contains .fc or frame[10] == :fc
----
If you are writing a script, or you think your expression may not be giving the
expected results because of the syntactical ambiguity of some filter expression
it is advisable to use the explicit syntax to indicate the correct meaning for
that expression.
[#ChWorkFilterAddExpressionSection]
=== The “Display Filter Expression” Dialog Box
When you are accustomed to Wireshark’s filtering system and know what labels you
wish to use in your filters it can be very quick to simply type a filter string.
However, if you are new to Wireshark or are working with a slightly unfamiliar
protocol it can be very confusing to try to figure out what to type. The
“Display Filter Expression” dialog box helps with this.
[TIP]
====
The “Display Filter Expression” dialog box is an excellent way to learn how to write
Wireshark display filter strings.
====
[#ChWorkFilterAddExpression1]
.The “Display Filter Expression” dialog box
image::images/ws-filter-add-expression.png[{screenshot-attrs}]
// Screenshot from Wireshark 3.1.1
When you first bring up the Display Filter Expression dialog box you are shown a tree
of field names, organized by protocol, and a box for selecting a relation.
Field Name::
Select a protocol field from the protocol field tree. Every protocol with
filterable fields is listed at the top level. You can search for a particular
protocol entry by entering the first few letters of the protocol name. By
expanding a protocol name you can get a list of the field names available for
filtering for that protocol.
Relation::
Select a relation from the list of available relation. The _is present_ is a
unary relation which is true if the selected field is present in a packet. All
other listed relations are binary relations which require additional data (e.g.
a _Value_ to match) to complete.
+
When you select a field from the field name list and select a binary relation
(such as the equality relation ==) you will be given the opportunity to enter a
value, and possibly some range information.
Value::
You may enter an appropriate value in the _Value_ text box. The _Value_ will
also indicate the type of value for the _Field Name_ you have selected (like
character string).
Predefined Values::
Some of the protocol fields have predefined values available, much like enumerations
in C. If the selected protocol field has such values defined, you can choose one
of them here.
Search::
Lets you search for a full or partial field name or description.
Regular expressions are supported.
For example, searching for “tcp.*flag” shows the TCP flags fields supported by a wide variety of dissectors, while “^tcp.flag” shows only the TCP flags fields supported by the TCP dissector.
Range::
A range of integers or a group of ranges, such as `1-12` or `39-42,98-2000`.
btn:[Help]::
Opens this section of the User’s Guide.
btn:[OK]::
When you have built a satisfactory expression click btn:[OK] and a filter string
will be built for you.
btn:[Cancel]::
You can leave the “Add Expression...” dialog box without any effect by
clicking the btn:[Cancel] button.
[#ChWorkDefineFilterSection]
=== Defining And Saving Filters
You create pre-defined filters that appear in the capture and display filter bookmark menus (image:images/toolbar/filter-toolbar-bookmark.png[height=16,width=12]).
This can save time in remembering and retyping some of the more complex filters you use.
To create or edit capture filters, select menu:Manage Capture Filters[] from the capture filter bookmark menu or menu:Capture[Capture Filters...] from the main menu.
Display filters can be created or edited by selecting menu:Manage Display Filters[] from the display filter bookmark menu or menu:Analyze[Display Filters...] from the main menu.
Wireshark will open the corresponding dialog as shown in <<FiltersDialog>>.
The two dialogs look and work similar to one another.
Both are described here, and the differences are noted as needed.
[#FiltersDialog]
.The “Capture Filters” and “Display Filters” dialog boxes
image::images/ws-filters.png[{screenshot-attrs}]
btn:[{plus}]::
Adds a new filter to the list.
You can edit the filter name or expression by double-clicking on it.
+
The filter name is used in this dialog to identify the filter for your convenience and is not used elsewhere.
You can create multiple filters with the same name, but this is not very useful.
+
When typing in a filter string, the background color will change depending on the validity of the filter similar to the main capture and display filter toolbars.
btn:[-]::
Delete the selected filter.
This will be greyed out if no filter is selected.
// XXX Asciidoctor doesn't seem to allow images in DL terms, otherwise we could use
// list-copy.template.png here.
btn:[Copy]::
Copy the selected filter.
This will be greyed out if no filter is selected.
btn:[OK]::
Saves the filter settings and closes the dialog.
btn:[Cancel]::
Closes the dialog without saving any changes.
[#ChWorkDefineFilterMacrosSection]
=== Defining And Saving Filter Macros
You can define a filter macro with Wireshark and label it for later use.
This can save time in remembering and retyping some of the more complex filters
you use.
To define and save your own filter macros, follow the steps below:
. In the main menu select menu:Analyze[Display Filter Macros...]. Wireshark will open a corresponding dialog <<FilterMacrosDialog>>.
+
[#FilterMacrosDialog]
+
.Display Filter Macros window
image::images/ws-filter-macros.png[{screenshot-attrs}]
. To add a new filter macro, click the btn:[{plus}] button in the bottom-left corner. A new row will appear in the Display Filter Macros table above.
. Enter the name of your macro in the `Name` column. Enter your filter macro in the `Text` column.
. To save your modifications, click the btn:[OK] button in the bottom-right corner of the <<FilterMacrosDialog>>.
To learn more about display filter macro syntax, see <<ChDisplayFilterMacrosSection>>.
[#ChWorkFindPacketSection]
=== Finding Packets
You can easily find packets once you have captured some packets or have
read in a previously saved capture file. Simply select menu:Edit[Find
Packet...] in the main menu. Wireshark will open a toolbar between the
main toolbar and the packet list shown in <<ChWorkFindPacketToolbar>>.
==== The “Find Packet” Toolbar
[#ChWorkFindPacketToolbar]
.The “Find Packet” toolbar
image::images/ws-find-packet.png[{screenshot-attrs}]
You can search using the following criteria:
Display filter::
Enter a display filter string into the text entry field and click the btn:[Find] button.
+
For example, to find the three-way handshake for a connection from host 192.168.0.1, use the following filter string:
+
----
ip.src==192.168.0.1 and tcp.flags.syn==1
----
+
The value to be found will be syntax checked while you type it in. If
the syntax check of your value succeeds, the background of the entry
field will turn green, if it fails, it will turn red. For more details
see <<ChWorkDisplayFilterSection>>
Hexadecimal Value::
Search for a specific byte sequence in the packet data.
+
For example, use “ef:bb:bf” to find the next packet that contains the
link:{wikipedia-main-url}Byte_order_mark[UTF-8 byte order mark].
String::
Find a string in the packet data, with various options.
Regular Expression::
Search the packet data using link:{pcre2pattern-url}[Perl-compatible
regular expressions]. PCRE patterns are beyond the scope of this
document, but typing “pcre test” into your favorite search engine
should return a number of sites that will help you test and explore
your expressions.
[#ChWorkGoToPacketSection]
=== Go To A Specific Packet
You can easily jump to specific packets with one of the menu items in
the menu:Go[] menu.
==== The “Go Back” Command
Go back in the packet history, works much like the page history in most
web browsers.
==== The “Go Forward” Command
Go forward in the packet history, works much like the page history in
most web browsers.
==== The “Go to Packet” Toolbar
[#ChWorkGoToPacketToolbar]
.The “Go To Packet” toolbar
image::images/ws-goto-packet.png[{screenshot-attrs}]
This toolbar can be opened by selecting menu:Go[Go to packet...] from
the main menu. It appears between the main toolbar and the packet list,
similar to the <<ChWorkFindPacketToolbar,”Find Packet” toolbar>>.
When you enter a packet number and press btn:[Go to packet]
Wireshark will jump to that packet.
==== The “Go to Corresponding Packet” Command
If a protocol field is selected which points to another packet in the capture
file, this command will jump to that packet.
As these protocol fields now work like links (just as in your Web browser), it’s
easier to simply double-click on the field to jump to the corresponding field.
==== The “Go to First Packet” Command
This command will jump to the first packet displayed.
==== The “Go to Last Packet” Command
This command will jump to the last packet displayed.
[#ChWorkMarkPacketSection]
=== Marking Packets
You can mark packets in the “Packet List” pane. A marked packet will be shown
with black background, regardless of the coloring rules set. Marking a packet
can be useful to find it later while analyzing in a large capture file.
Marked packet information is not stored in the capture file or anywhere
else. It will be lost when the capture file is closed.
You can use packet marking to control the output of packets when saving,
exporting, or printing. To do so, an option in the packet range is available,
see <<ChIOPacketRangeSection>>.
There are several ways to mark and unmark packets. From the menu:Edit[] menu
you can select from the following:
* menu:Mark/Unmark Packet[] toggles the marked state of a single packet.
This option is also available in the packet list context menu.
* menu:Mark All Displayed[] set the mark state of all displayed packets.
* menu:Unmark All Displayed[] reset the mark state of all packets.
You can also mark and unmark a packet by clicking on it in the packet list
with the middle mouse button.
[#ChWorkIgnorePacketSection]
=== Ignoring Packets
You can ignore packets in the “Packet List” pane. Wireshark will then
pretend that they not exist in the capture file. An ignored packet will
be shown with white background and grey foreground, regardless of the
coloring rules set.
Ignored packet information is not stored in the capture file or anywhere
else. It will be lost when the capture file is closed.
There are several ways to ignore and unignore packets. From the
menu:Edit[] menu you can select from the following:
* menu:Ignore/Unignore Packet[] toggles the ignored state of a single
packet. This option is also available in the packet list context menu.
* menu:Ignore All Displayed[] set the ignored state of all displayed packets.
* menu:Unignore All Displayed[] reset the ignored state of all packets.
[#ChWorkTimeFormatsSection]
=== Time Display Formats And Time References
While packets are captured, each packet is timestamped. These timestamps will be
saved to the capture file, so they will be available for later analysis.
A detailed description of timestamps, timezones and alike can be found at:
<<ChAdvTimestamps>>.
The timestamp presentation format and the precision in the packet list can be
chosen using the View menu, see <<ChUseWiresharkViewMenu>>.
The available presentation formats are:
* menu:Date and Time of Day: 1970-01-01 01:02:03.123456[] The absolute date and time
of the day when the packet was captured.
* menu:Time of Day: 01:02:03.123456[] The absolute time of the day when the packet
was captured.
* menu:Seconds Since First Captured Packet: 123.123456[] The time relative to the
start of the capture file or the first “Time Reference” before this packet
(see <<ChWorkTimeReferencePacketSection>>).
* menu:Seconds Since Previous Captured Packet: 1.123456[] The time relative to the
previous captured packet.
* menu:Seconds Since Previous Displayed Packet: 1.123456[] The time relative to the
previous displayed packet.
* menu:Seconds Since Epoch (1970-01-01): 1234567890.123456[] The time relative to
epoch (midnight UTC of January 1, 1970).
The available precisions (aka. the number of displayed decimal places) are:
* menu:Automatic (from capture file)[] The timestamp precision of the loaded capture file format will be
used (the default).
* menu:Seconds[], menu:Tenths of a second[], menu:Hundredths of a second[],
menu:Milliseconds[], menu:Microseconds[] or menu:Nanoseconds[] The
timestamp precision will be forced to the given setting. If the
actually available precision is smaller, zeros will be appended. If
the precision is larger, the remaining decimal places will be cut off.
Precision example: If you have a timestamp and it’s displayed using, “Seconds
Since Previous Packet” the value might be 1.123456. This will be displayed
using the “Automatic” setting for libpcap files (which is microseconds). If
you use Seconds it would show simply 1 and if you use Nanoseconds it shows
1.123456000.
[#ChWorkTimeReferencePacketSection]
==== Packet Time Referencing
The user can set time references to packets. A time reference is the starting
point for all subsequent packet time calculations. It will be useful, if you
want to see the time values relative to a special packet, e.g., the start of a
new request. It’s possible to set multiple time references in the capture file.
The time references will not be saved permanently and will be lost when you
close the capture file.
Time referencing will only be useful if the time display format is set to
“Seconds Since First Captured Packet”. If one of the other time display formats
are used, time referencing will have no effect (and will make no sense either).
To work with time references, choose one of the menu:Time Reference[] items in
the menu:[Edit] menu or from the pop-up menu of the “Packet List” pane. See
<<ChUseEditMenuSection>>.
* menu:Set Time Reference (toggle)[] Toggles the time reference state of the
currently selected packet to on or off.
* menu:Find Next[] Find the next time referenced packet in the “Packet List” pane.
* menu:Find Previous[] Find the previous time referenced packet in the “Packet
List” pane.
[#ChWorkTimeReference]
.Wireshark showing a time referenced packet
image::images/ws-time-reference.png[{screenshot-attrs}]
A time referenced packet will be marked with the string $$*REF*$$ in the Time
column (see packet number 10). All subsequent packets will show the time since
the last time reference.
[#ChWorkShiftTimePacketSection]
=== Time Shifting Packets
Sometimes you will want to adjust the timestamps in a capture file.
This may be because a machine performing the capture had an inaccurate
clock, or because the capture was originally saved with timestamps in
<<ChAdvTabTimezones,local time>> (perhaps even to a capture file format
that only writes times in local time, or only writes the time of day
but not the date). One common use is to synchronize timestamps between
captures made on different machines with relative clock skew or clock
drift before <<ChIOMergeSection,merging>> them. Selecting
menu:Edit[Time Shift...] from the main menu opens the "Time Shift" dialog.
.The “Time Shift” dialog
image::images/ws-time-shift.png[{medium-screenshot-attrs}]
Shift all packets by...::
Apply a fixed offset, entered as a relative time in hours, minutes,
and seconds, to the timestamps for all packets. This is useful for
correcting small known errors or timezones.
Set the time for packet...::
Apply offsets based on one or, if the box is checked, two given packets
to the timestamps for all packets. Enter the packet number and absolute
date and time for the packet(s). When one packet is used, a fixed offset
is applied that can be used to correct for clock skew. When two packets
are used, the correction for all other packets is computed linearly,
which can be used to correct for clock drift. This is useful when the
precise date and time for particular packets are known, e.g. packets
containing the NTP or PTP protocols.
Undo all shifts::
This removes all unsaved time shifts from packets.
[NOTE]
.Time shifts are applied to all packets
====
Time shifts are applied to all packets in the capture, including
ignored packets and packets that are not displayed due to the current
filter.
Wireshark does not have a method to adjust the timestamps of individual
or selected packets.
====
The offset currently applied to time shifted packets is in the
`frame.offset_shift` field, which can be viewed in the packet details.
.A Time Shifted Packet
image::images/ws-time-shift-details.png[{medium-screenshot-attrs}]
After time shifts are applied, the file will have unsaved changes,
which are indicated with an {asterisk} beside its name in the title bar.
Beginning with Wireshark 4.2.0, <<ChIOSaveSection,saving>> the file
will write the corrected timestamps to the capture file.
If you attempt to close the capture file without saving it, a dialog
will prompt you to save in order to prevent losing your changes
(unless that warning has been disabled in the <<ChCustGUIPrefPage,preferences>>.)
// End of WSUG Chapter Work
|