tshark linux
大多数情况下,当我们连接到Internet时,我们不会想到底层的网络协议可以使一切变为可能。 现在,当您阅读本文时,计算机正在交换大量数据包并通过Internet进行传输。
要了解这些协议,您需要一个可以捕获并帮助您分析这些数据包的工具。 Wireshark是一种流行的开源图形用户界面(GUI)工具,用于分析数据包。 但是,它也为喜欢在Linux命令行上工作的人们提供了一个称为TShark的强大命令行实用程序。
要尝试本文中的示例,您需要连接到Internet。 有关TShark命令行选项或标志的任何更改,请参考相应的手册页和在线文档 。 另外,我在这些示例中使用Fedora。
[gaurav@testbox ~]$ cat /etc/fedora-release
Fedora release 30 (Thirty)
[gaurav@testbox ~]$
首先,确保已安装必需的软件包:
[gaurav@testbox ~]$ rpm -qa | grep -i wireshark
wireshark-cli-3.0.1-1.fc30.x86_64
[gaurav@testbox ~]$
如果安装了Wireshark软件包,请检查是否安装了TShark实用程序,如果已安装,则检查哪个版本:
[gaurav@testbox ~]$ tshark -v
TShark (Wireshark) 3.0.1 (23f278e2)
Built using gcc 9.0.1 20190312 (Red Hat 9.0.1-0.10).
[gaurav@testbox ~]$
如果您以普通的非root用户身份登录,则需要sudo权限才能使用TShark实用程序。 超级用户可以跳过sudo并直接运行tshark命令。
在TShark可以分析数据包之前,它需要捕获这些数据包。 网络数据包通过服务器,工作站或台式机上的网络接口卡(NIC)或笔记本电脑上的WiFi卡进行处理。 首先确定用于连接互联网的NIC或WiFi卡。
要确定哪些网络设备可用于TShark,请运行以下命令。 我的笔记本电脑(用于这些示例)显示:
[gaurav@testbox ~]$ sudo tshark -D
Running as user "root" and group "root". This could be dangerous.
1. wlp61s0
2. lo (Loopback)
3. any
4. virbr0
5. enp0s31f6
6. bluetooth-monitor
7. nflog
8. nfqueue
[gaurav@testbox ~]$
我正在使用WiFi卡连接到家庭路由器以访问Internet。 您可以使用ifconfig -a命令查看系统上的所有网络接口。 如果未安装ifconfig命令,则可以改用较新的ip addr show命令。 接口之一应分配有一个IP地址。 对于特定的接口,可以使用ifconfig
ifconfig wlp61s0
既然您知道正在使用哪个接口连接到Internet,就可以开始使用它捕获一些数据包。 -i选项可用于捕获此特定接口上的数据包。 您将看到一堆输出,显示通过接口传输的网络数据包,但是可以使用Ctrl + C命令停止它:
[gaurav@testbox ~]$ sudo tshark -i wlp61s0
Running as user "root" and group "root". This could be dangerous.
Capturing on 'wlp61s0'
1 0.000000000 192.168.1.9 → 192.168.1.1 DNS 77 Standard query 0xa02b AAAA fedoraproject.org
2 0.000128115 192.168.1.9 → 192.168.1.1 DNS 77 Standard query 0xcc47 A fedoraproject.org
3 0.000316195 192.168.1.9 → 192.168.1.1 DNS 77 Standard query 0xe29d A fedoraproject.org
4 0.000616019 192.168.1.9 → 192.168.1.1 DNS 77 Standard query 0xac7c AAAA fedoraproject.org
5 0.007963200 192.168.1.1 → 192.168.1.9 DNS 93 Standard query response 0xcc47 A fedoraproject.org A 185.141.165.254
6 0.009171815 192.168.1.1 → 192.168.1.9 DNS 93 Standard query response 0xe29d A fedoraproject.org A 185.141.165.254
7 0.011075350 192.168.1.1 → 192.168.1.9 DNS 322 Standard query response 0xa02b AAAA fedoraproject.org AAAA 2610:28:3090:3001:dead:beef:cafe:fed3 AAAA 2605:bc80:3010:600:dead:beef:cafe:fed9 AAAA 2604:1580:fe00:0:dead:beef:cafe:fed1 NS ns04.fedoraproject.org NS ns05.fedoraproject.org NS ns02.fedoraproject.org A 152.19.134.139 AAAA 2610:28:3090:3001:dead:beef:cafe:fed5 A 209.132.181.17 A 85.236.55.10 AAAA 2001:4178:2:1269:dead:beef:cafe:fed5
8 0.012458151 192.168.1.1 → 192.168.1.9 DNS 322 Standard query response 0xac7c AAAA fedoraproject.org AAAA 2605:bc80:3010:600:dead:beef:cafe:fed9 AAAA 2610:28:3090:3001:dead:beef:cafe:fed3 AAAA 2604:1580:fe00:0:dead:beef:cafe:fed1 NS ns05.fedoraproject.org NS ns02.fedoraproject.org NS ns04.fedoraproject.org A 152.19.134.139 AAAA 2610:28:3090:3001:dead:beef:cafe:fed5 A 209.132.181.17 A 85.236.55.10 AAAA 2001:4178:2:1269:dead:beef:cafe:fed5
^C8 packets captured
[gaurav@testbox ~]$
查看上面的前两个数据包; 它们在行的开头用数字表示:
1 0.000000000 192.168.1.9 → 192.168.1.1 DNS 77 Standard query 0xa02b AAAA fedoraproject.org
2 0.000128115 192.168.1.9 → 192.168.1.1 DNS 77 Standard query 0xcc47 A fedoraproject.org
这些行在箭头的两侧包括两个IP地址-这些是交换数据包的主机。 箭头的方向指示数据包的前进方向。 因此, 192.168.1.9→192.168.1.1表示该数据包起源于主机192.168.1.9 ,这是我的笔记本电脑,并且到达目的地192.168.1.1 ,这是我的家庭路由器。 在目标IP地址之后,您会看到DNS ,它只是域名系统协议,后面是DNS查询。 以后再说。
您可以使用-c (计数)选项限制捕获并显示在屏幕上的数据包数量。 以下示例显示了捕获的10个数据包。 注意协议,您已经在上面看到了DNS,这里还有其他协议,例如NTP和TCP:
[gaurav@testbox ~]$ sudo tshark -i wlp61s0 -c 10
Running as user "root" and group "root". This could be dangerous.
Capturing on 'wlp61s0'
1 0.000000000 192.168.1.9 → 10.5.26.10 NTP 90 NTP Version 4, client
2 0.803303963 192.168.1.9 → 10.5.27.10 NTP 90 NTP Version 4, client
3 3.524867645 192.168.1.9 → 192.168.1.1 DNS 69 Standard query 0x3837 A testbox
4 6.227373094 192.168.1.9 → 192.168.1.1 DNS 89 Standard query 0x0814 A location.services.mozilla.com
5 6.227395145 192.168.1.9 → 192.168.1.1 DNS 89 Standard query 0x5e1c AAAA location.services.mozilla.com
6 6.234878912 192.168.1.1 → 192.168.1.9 DNS 105 Standard query response 0x0814 A location.services.mozilla.com A 34.253.23.107
7 6.238110416 192.168.1.1 → 192.168.1.9 DNS 223 Standard query response 0x5e1c AAAA location.services.mozilla.com CNAME locprod1-elb-eu-west-1.prod.mozaws.net SOA ns-1260.awsdns-29.org
8 6.238446999 192.168.1.9 → 34.253.23.107 TCP 74 35326 → 443 [SYN] Seq=0 Win=64240 Len=0 MSS=1460 SACK_PERM=1 TSval=2832002333 TSecr=0 WS=128
9 6.438833991 34.253.23.107 → 192.168.1.9 TCP 74 443 → 35326 [SYN, ACK] Seq=0 Ack=1 Win=26847 Len=0 MSS=1440 SACK_PERM=1 TSval=2056252981 TSecr=2832002333 WS=256
10 6.438947001 192.168.1.9 → 34.253.23.107 TCP 66 35326 → 443 [ACK] Seq=1 Ack=1 Win=64256 Len=0 TSval=2832002533 TSecr=2056252981
10 packets captured
[gaurav@testbox ~]$
DNS协议将主机名转换为IP地址,并将IP地址转换为主机名。 有专用的DNS(或名称)服务器,您可以使用主机名或IP地址进行查询。 下面的示例使用nslookup命令来查询名称服务器,以将主机名解析为IP地址。 在继续之前,请确保已安装bind-utils软件包:
[gaurav@testbox ~]$ rpm -qa | grep -i bind-utils
bind-utils-9.11.5-13.P4.fc30.x86_64
[gaurav@testbox ~]$
为了查询您的名称服务器,您需要找出您的计算机正在与哪台服务器进行通信。 您可以在/etc/resolv.conf文件中找到该信息。 在我的情况下,名称服务器指向1.1.1.1 ,这是Cloudflare提供的公共DNS服务:
[gaurav@testbox ~]$ cat /etc/resolv.conf
# Generated by NetworkManager
nameserver 1.1.1.1
[gaurav@testbox ~]$
诸如Opensource.com这样的主机名对于人类来说很容易理解,但是机器使用