TShark: NOTES

TShark: NOTES

TShark is an open-source command-line network traffic analyser. It is created by the Wireshark developers and has most of the features of Wireshark. It is commonly used as a command-line version of Wireshark. However, it can also be used like tcpdump. Therefore it is preferred for comprehensive packet assessments.

Command-Line Packet Analysis Hints

TShark is a text-based tool, and it is suitable for data carving, in-depth packet analysis, and automation with scripts. This strength and flexibility come out of the nature of the CLI tools, as the produced/processed data can be pipelined to additional tools. The most common tools used in packet analysis are listed below.

Tool/UtilityPurpose and Benefit
capinfosA program that provides details of a specified capture file. It is suggested to view the summary of the capture file before starting an investigation.
grepHelps search plain-text data.
cutHelps cut parts of lines from a specified data source.
uniqFilters repeated lines/values.
nlViews the number of shown lines.
sedA stream editor.
awkScripting language that helps pattern search and processing.

Command-Line Interface and Parameters

TShark is a text-based (command-line) tool. Therefore, conducting an in-depth and consecutive analysis of the obtained results is easy. Multiple built-in options are ready to use to help analysts conduct such investigations. However, learning the parameters is essential; you will need the built-in options and associated parameters to keep control of the output and not be flooded with the detailed output of TShark. The most common parameters are explained in the given table below. Note that TShark requires superuser privileges to sniff live traffic and list all available interfaces.

ParameterPurpose
-h• Display the help page with the most common features. • tshark -h
-v• Show version info. • tshark -v
-D• List available sniffing interfaces. • tshark -D
-i• Choose an interface to capture live traffic. • tshark -i 1tshark -i ens55
No Parameter• Sniff the traffic like tcpdump. • tshark

 Command-Line Interface and Parameters II

Let's continue discovering main parameters of TShark.

ParameterPurpose
-r• Read/input function. Read a capture file. • tshark -r demo.pcapng
-c• Packet count. Stop after capturing a specified number of packets. • E.g. stop after capturing/filtering/reading 10 packets. • tshark -c 10
-w• Write/output function. Write the sniffed traffic to a file. • tshark -w sample-capture.pcap
-V• Verbose. • Provide detailed information for each packet. This option will provide details similar to Wireshark's "Packet Details Pane". • tshark -V
-q• Silent mode. • Suspress the packet outputs on the terminal. • tshark -q
-x• Display packet bytes. • Show packet details in hex and ASCII dump for each packet. • tshark -x

Capture Condition Parameters

As a network sniffer and packet analyser, TShark can be configured to count packets and stop at a specific point or run in a loop structure. The most common parameters are explained below.

ParameterPurpose
Define capture conditions for a single run/loop. STOP after completing the condition. Also known as "Autostop".
-aDuration: Sniff the traffic and stop after X seconds. Create a new file and write output to it. ◦ tshark -w test.pcap -a duration:1Filesize: Define the maximum capture file size. Stop after reaching X file size (KB). ◦ tshark -w test.pcap -a filesize:10Files: Define the maximum number of output files. Stop after X files. ◦ tshark -w test.pcap -a filesize:10 -a files:3
Ring buffer control options. Define capture conditions for multiple runs/loops. (INFINITE LOOP).
-bDuration: Sniff the traffic for X seconds, create a new file and write output to it.  ◦ tshark -w test.pcap -b duration:1Filesize: Define the maximum capture file size. Create a new file and write output to it after reaching filesize X (KB). ◦ tshark -w test.pcap -b filesize:10Files: Define the maximum number of output files. Rewrite the first/oldest file after creating X files. ◦ tshark -w test.pcap -b filesize:10 -b files:3

Capture condition parameters only work in the "capturing/sniffing" mode. You will receive an error message if you try to read a pcap file and apply the capture condition parameters. The idea is to save the capture files in specific sizes for different purposes during live capturing. If you need to extract sorts of packets from a specific capture file, you will need to use the read&write options discussed in the previous task.

Hint: TShark supports combining autostop (-a) parameters with ring buffer control parameters (-b). You can combine the parameters according to your needs. Use the infinite loop options carefully; remember, you must use at least one autostop parameter to stop the infinite loop.

Packet Filtering Parameters | Capture & Display Filters

Capture Filters Live filtering options. The purpose is to save only a specific part of the traffic. It is set before capturing traffic and is not changeable during live capture.

Display Filters Post-capture filtering options. The purpose is to investigate packets by

reducing the number of visible packets, which is changeable during the investigation.

ParameterPurpose
-fCapture filters. Same as BPF syntax and Wireshark's capture filters.
-YDisplay filters. Same as Wireshark's display filters.

Capture Filters

Wireshark's capture filter syntax is used here. The basic syntax for the Capture/BPF filter is shown below. You can read more on capture filter syntax here and here. Boolean operators can also be used in both types of filters.

QualifierDetails and Available Options
TypeTarget match type. You can filter IP addresses, hostnames, IP ranges, and port numbers. Note that if you don't set a qualifier, the "host" qualifier will be used by default. • host | net | port | portrange • Filtering a host ◦ tshark -f "host 10.10.10.10" • Filtering a network range  ◦ tshark -f "net 10.10.10.0/24" • Filtering a Port ◦ tshark -f "port 80" • Filtering a port range ◦ tshark -f "portrange 80-100"
DirectionTarget direction/flow. Note that if you don't use the direction operator, it will be equal to "either" and cover both directions. • src | dst • Filtering source address ◦ tshark -f "src host 10.10.10.10" • Filtering destination address ◦ tshark -f "dst host 10.10.10.10"
ProtocolTarget protocol. • arp | ether | icmp | ip | ip6 | tcp | udp • Filtering TCP ◦ tshark -f "tcp" • Filtering MAC address ◦ tshark -f "ether host F8:DB:C5:A2:5D:81" • You can also filter protocols with IP Protocol numbers assigned by IANA. • Filtering IP Protocols 1 (ICMP) ◦ tshark -f "ip proto 1"Assigned Internet Protocol Numbers
Capture Filter CategoryDetails
Host FilteringCapturing traffic to or from a specific host. • Traffic generation with cURL. This command sends a default HTTP query to a specified address. ◦ curl tryhackme.com • TShark capture filter for a host ◦ tshark -f "host tryhackme.com"
IP FilteringCapturing traffic to or from a specific port. We will use the Netcat tool to create noise on specific ports. • Traffic generation with Netcat. Here Netcat is instructed to provide details (verbosity), and timeout is set to 5 seconds. ◦ nc 10.10.10.10 4444 -vw 5 • TShark capture filter for specific IP address ◦ tshark -f "host 10.10.10.10"
Port FilteringCapturing traffic to or from a specific port. We will use the Netcat tool to create noise on specific ports. • Traffic generation with Netcat. Here Netcat is instructed to provide details (verbosity), and timeout is set to 5 seconds. ◦ nc 10.10.10.10 4444 -vw 5 • TShark capture filter for port 4444 ◦ tshark -f "port 4444"
Protocol FilteringCapturing traffic to or from a specific protocol. We will use the Netcat tool to create noise on specific ports. • Traffic generation with Netcat. Here Netcat is instructed to use UDP, provide details (verbosity), and timeout is set to 5 seconds. ◦ nc -u 10.10.10.10 4444 -vw 5 • TShark capture filter for ◦ tshark -f "udp"

Display Filters

Wireshark's display filter syntax is used here. You can use the official Display Filter Reference to find the protocol breakdown for filtering. Additionally, you can use Wireshark's build-in "Display Filter Expression" menu to break down protocols for filters. Note that Boolean operators can also be used in both types of filters. Common filtering options are shown in the given table below.

Note: Using single quotes for capture filters is recommended to avoid space and bash expansion problems. Once again, you can check the Wireshark: Packet Operations room (Task 4 & 5) if you want to review the principles of packet filtering.

Display Filter CategoryDetails and Available Options
Protocol: IPFiltering an IP without specifying a direction. ◦ tshark -Y 'ip.addr == 10.10.10.10'Filtering a network range  ◦ tshark -Y 'ip.addr == 10.10.10.0/24'Filtering a source IP ◦ tshark -Y 'ip.src == 10.10.10.10'Filtering a destination IP ◦ tshark -Y 'ip.dst == 10.10.10.10'
Protocol: TCPFiltering TCP port ◦ tshark -Y 'tcp.port == 80'Filtering source TCP port ◦ tshark -Y 'tcp.srcport == 80'
Protocol: HTTPFiltering HTTP packets ◦ tshark -Y 'http'Filtering HTTP packets with response code "200" ◦ tshark -Y "http.response.code == 200"
Protocol: DNSFiltering DNS packets ◦ tshark -Y 'dns'Filtering all DNS "A" packets ◦ tshark -Y 'dns.qry.type == 1'

Command-Line Wireshark Features I | Statistics

At the beginning of this module, we mentioned that TShark is considered a command line version of Wireshark. In addition to sharing the same display filters, TShark can accomplish several features of Wireshark explained below.

Three important points when using Wireshark-like features:

  • These options are applied to all packets in scope unless a display filter is provided.
  • Most of the commands shown below are CLI versions of the Wireshark features discussed in Wireshark: Packet Operations (Task 2).
  • TShark explains the parameters used at the beginning of the output line.
    • For example, you will use the phs option to view the protocol hierarchy. Once you use this command, the result will start with the "Packet Hierarchy Statistics" header.
ParameterPurpose
–color• Wireshark-like colourised output. • tshark --color
-z• Statistics • There are multiple options available under this parameter. You can view the available filters under this parameter with: ◦ tshark -z help • Sample usage. ◦ tshark -z filter • Each time you filter the statistics, packets are shown first, then the statistics provided. You can suppress packets and focus on the statistics by using the -q parameter.

Statistics | Endpoints

The endpoint statistics view helps analysts to overview the unique endpoints. It also shows the number of packets associated with each endpoint. If you are familiar with Wireshark, you should know that endpoints can be viewed in multiple formats. Similar to Wireshark, TShark supports multiple source filtering options for endpoint identification. Use the -z endpoints,ip -q parameters to view IP endpoints. Note that you can choose other available protocols as well.

Filters for the most common viewing options are explained below.

FilterPurpose
eth• Ethernet addresses
ip• IPv4 addresses
ipv6• IPv6 addresses
tcp• TCP addresses • Valid for both IPv4 and IPv6
udp• UDP addresses • Valid for both IPv4 and IPv6
wlan• IEEE 802.11 addresses

You can filter the packets and follow the streams by using the parameters given below.

  • TCP Streams: z follow,tcp,ascii,0 -q
  • UDP Streams: z follow,udp,ascii,0 -q
  • HTTP Streams: z follow,http,ascii,0 -q

You can filter the packets and follow the streams by using the parameters given below.

  • -export-objects http,/home/ubuntu/Desktop/extracted-by-tshark -q

Credentials

This option helps analysts to detect and collect cleartext credentials from FTP, HTTP, IMAP, POP and SMTP. You can filter the packets and find the cleartext credentials using the parameters below.

  • z credentials -q

Advanced Filtering Options | Contains, Matches and Extract Fields

Accomplishing in-depth packet analysis sometimes ends up with a special filtering requirement that cannot be covered with default filters. TShark supports Wireshark's "contains" and "matches" operators, which are the key to the advanced filtering options. You can visit the Wireshark: Packet Operations room (Task 6) if you are unfamiliar with these filters.

A quick recap from the Wireshark: Packet Operations room:

FilterDetails
Contains• Search a value inside packets. • Case sensitive. • Similar to Wireshark's "find" option.
Matches• Search a pattern inside packets. • Supports regex. • Case insensitive. • Complex queries have a margin of error.

Note: The "contains" and "matches" operators cannot be used with fields consisting of "integer" values.

Tip: Using HEX and regex values instead of ASCII always has a better chance of a match.

Extract Fields

This option helps analysts to extract specific parts of data from the packets. In this way, analysts have the opportunity to collect and correlate various fields from the packets. It also helps analysts manage the query output on the terminal. The query structure is explained in the table given below.

Main FilterTarget FieldShow Field Name
-T fields-e <field name>-E header=y

Note: You need to use the -e parameter for each field you want to display.

You can filter any field by using the field names as shown below.

  • T fields -e ip.src -e ip.dst -E header=y

Filter: "contains"

Filtercontains
TypeComparison operator
DescriptionSearch a value inside packets. It is case-sensitive and provides similar functionality to the "Find" option by focusing on a specific field.
ExampleFind all "Apache" servers.
WorkflowList all HTTP packets where the "server" field contains the "Apache" keyword.
Usagehttp.server contains "Apache"

Filter: "matches"

Filtermatches
TypeComparison operator
DescriptionSearch a pattern of a regular expression. It is case-insensitive, and complex queries have a margin of error.
ExampleFind all .php and .html pages.
WorkflowList all HTTP packets where the "request method" field matches the keywords "GET" or "POST".
Usagehttp.request.method matches "(GET|POST)"

Use Cases

When investigating a case, a security analyst should know how to extract hostnames, DNS queries, and user agents to hunt low-hanging fruits after viewing the statistics and creating an investigation plan. The most common four use cases for every security analyst are demonstrated below. If you want to learn more about the mentioned protocols and benefits of the extracted info, please refer to the Wireshark Traffic Analysis room.

Extract Hostnames

Extract hostnames

user@ubuntu$ tshark -r hostnames.pcapng -T fields -e dhcp.option.hostname     92-rkd
92-rkd
T3400

T3400

60-alfb-sec2
60-alfb-sec2

aminott
...

 

The above example shows how to extract hostnames from DHCP packets with TShark. However, the output is hard to manage when multiple duplicate values exist. A skilled analyst should know how to use native Linux tools/utilities to manage and organise the command line output, as shown below.

Extract hostnames

user@ubuntu$ tshark -r hostnames.pcapng -T fields -e dhcp.option.hostname | awk NF | sort -r | uniq -c | sort -r     26 202-ac
     18 92-rkd
     14 93-sts-sec
...

 

Now the output is organised and ready to process/use. The logic of the query is explained below.

QueryPurpose
tshark -r hostnames.pcapng -T fields -e dhcp.option.hostname Main query.Extract the DHCP hostname value.
awk NFRemove empty lines.
sort -rSort recursively before handling the values.
uniq -cShow unique values, but calculate and show the number of occurrences.
sort -rThe final sort process.Show the output/results from high occurrences to less.

Extract DNS Queries

Matches filter

user@ubuntu$ tshark -r dns-queries.pcap -T fields -e dns.qry.name | awk NF | sort -r | uniq -c | sort -r     96 connectivity-check.ubuntu.com.rhodes.edu
     94 connectivity-check.ubuntu.com
      8 3.57.20.10.in-addr.arpa
      4 e.9.d.b.c.9.d.7.1.b.0.f.a.2.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa
      4 0.f.2.5.6.b.e.f.f.f.b.7.2.4.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa
      2 _ipps._tcp.local,_ipp._tcp.local
      2 84.170.224.35.in-addr.arpa
      2 22.2.10.10.in-addr.arpa

 

Extract User Agents

Matches filter

user@ubuntu$ tshark -r user-agents.pcap -T fields -e http.user_agent | awk NF | sort -r | uniq -c | sort -r      6 Mozilla/5.0 (Windows; U; Windows NT 6.4; en-US) AppleWebKit/534.10 (KHTML, like Gecko) Chrome/8.0.552.237 Safari/534.10
      5 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:100.0) Gecko/20100101 Firefox/100.0
      5 Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.32 Safari/537.36
      4 sqlmap/1.4#stable (http://sqlmap.org)
      3 Wfuzz/2.7
      3 Mozilla/5.0 (compatible; Nmap Scripting Engine; https://nmap.org/book/nse.html)

 

 

r0tZ Avatar

Leave a Reply

Your email address will not be published. Required fields are marked *