Capture filter is set before collecting packets. It is applied at the time of data acquisition and it impacts the size of the capture. It does not have as many variations as display filter and is usually not aware of protocols above TCP/UDP layer. A common form of capture filter is BPF (Berkerly Packet Filter) which is used in Linux Socket Filtering (e.g. tcpdump).
Basic form is:
[tcp|udp] [src|dst] host 192.168.1.2 port 1234
'tcp dst port 8080 and src host 18.104.22.168'
Display filter is set after packet collection. It is applied at the time of data manipulation. It does not impact the size of capture, but it controls how the data is presented (typically for analysis purpose). Display filter may support a variety of expressions that are interpreting data at TCP/UDP layer or above, for example HTTP.
Here are some examples:
(tcp.flags.syn == 1) || (tcp.flags.reset == 1) (tcp.flags.reset == 1) || (http.request.method==GET) || (tcp.flags.reset == 1)||(http.request.uri contains "/box/url/string") ||(http.response.code == 200)
Here are some further examples provided by Wireshark.
For more details about the usage of capture filter and display filter, here is a page with cheatsheet. Example for tcpdump on the left and wireshark in the middle and on the right.
To view http packet in shell terminal, there is also a helpful tool called httpry. You can applied BPF styled filter for capture, and organize display column. The drawback is there is no display filter so you’ would have to use grep. Here is an example:
httpry -i eth0 'tcp dst port 8080 and src host 22.214.171.124' -m GET -f Timestamp,x-correlation-id,x-userid,Request-URI | grep -v -P '\t\-\t'