使用 tcpdump 进行数据包分析
最重要的 Linux 网络命令之一是 tcpdump 命令。
我们可以使用 tcpdump 命令来捕获通过网络接口的流量。
在对网络进行故障排除时,这种对数据包的访问(这是网络的最深层次)非常重要。
$ tcpdump -i <network_device>
我们还可以指定一个协议(TCP、UDP、ICMP 等),如下所示:
$ tcpdump -i <network_device> tcp
此外,我们可以指定端口:
$ tcpdump -i <network_device> port 80
tcpdump 会一直运行直到你取消它;最好使用 -c 选项来捕获预定数量的事件,如下所示:
$ tcpdump -c 20 -i <network_device>
我们还可以使用 src 选项或者转至使用 dst 选项指定要捕获的 IP。
$ tcpdump -c 20 -i <network_device> src XXX.XXX.XXX.XXX
我们可以像这样获取设备名称:
$ ifconfig
我们可以将从 tcpdump 捕获的流量保存到文件中,然后使用 -w 选项读取它。
$ tcpdump -w /path/ -i <network_device>
并读取该文件:
$ tcpdump -r /path
使用 ping 命令检查网络连接
ping 命令是网络故障排除中最常用的 Linux 网络命令之一。
我们可以使用它来检查是否可以访问特定的 IP 地址。
ping 命令的工作原理是发送 ICMP 回显请求以检查网络连接。
$ ping google.com
这些结果显示 ping 成功,我们可以看到在我们访问 google.com 的数据包过程中没有任何问题。
此命令测量平均响应。
如果没有响应,则可能存在以下情况之一:
- 网络本身存在物理问题。
- 该位置可能不正确或者不起作用。
- 目标正在阻止 ping 请求。
- 路由表有问题。
如果要将发出的回显请求数限制为 3,可以这样做:
$ ping -c 3 google.com
这里 ping 命令在三个周期后停止发送回声请求。
关于 ping 命令,我们应该考虑一些问题。
这些问题不一定意味着存在以下问题:
与目标的距离:因此,如果我们居住在美国并且我们 ping 亚洲的服务器,我们应该期望此 ping 将比 ping 美国的服务器花费更多的时间。
连接速度:如果连接速度较慢,则 ping 将比连接速度较快时花费更长的时间。
跳数:这是指回波在到达目的地之前所经过的路由器和服务器。
关于 ping 的重要规则是低 ping 总是可取的。
使用 traceroute 命令诊断网络延迟
traceroute 命令是最有用的 Linux 网络命令之一。
我们可以使用它来显示到达目标的路径以及延迟的来源。
此命令基本上有助于:
- 提供路径上每个设备的名称和身份。
- 报告网络延迟并确定延迟来自哪个设备。
$ traceroute google.com
输出将提供指定的主机、数据包的大小、IP 地址和跳数。
我们可以看到主机名、IP 地址、跳数和数据包传输时间。
要避免反向 DNS 查找,请使用 -n 选项。
$ traceroute -n google.com
通过使用 traceroute 命令,我们可以识别网络瓶颈。
此处显示的星号表示路由到该主机时存在潜在问题,因为星号表示数据包丢失或者丢弃的数据包。
traceroute 命令发送 UDP 数据包,traceroute 可以发送 UDP、TCP 和 ICMP。
如果需要发送ICMP包,可以这样发送:
$ sudo traceroute -I google.com
要使用 TCP 变体,我们可以像这样使用它:
$ sudo traceroute -T google.com
这是因为有些服务器会阻塞UDP请求,所以可以使用这种方法。
在这种情况下,我们可以发送 UDP、ICMP 或者 TCP 来绕过这些问题。
mtr 命令(实时跟踪)
此命令是 traceroute 命令的替代命令。
$ mtr google.com
mtr 命令最好的一点是它显示实时数据,与 traceroute 不同。
此外,我们可以使用带有 -report 选项的 mtr 命令,该命令向沿途发现的每个跃点发送 10 个数据包,如下所示:
$ mtr --report google.com
该命令提供了比 traceroute 更好的大量细节。
如果此命令不使用普通用户帐户运行,则应使用 root,因为某些发行版仅针对 root 用户调整此二进制文件的权限。
安装并使用 iftop 命令进行流量监控
我们可以使用 iftop 实用程序或者 iftop 命令来监控流量并显示实时结果。
我们可以像这样下载该工具:
$ wget http://www.ex-parrot.com/pdw/iftop/download/iftop-0.17.tar.gz
然后提取它:
$ tar zxvf iftop-0.17.tar.gz
然后编译它:
$ cd iftop-0.17 $ ./configure $ make $ make install
如果你对 libpcap 有任何错误,你可以像这样安装它:
$ yum install libpcap-dev
我们可以像这样以 root 用户身份运行该工具:
$ sudo iftop -I <interface>
我们将看到此表格,其中包含有关流量的实时数据。
使用 iftop 添加 P 选项以显示端口。
$ sudo iftop -P
我们可以使用 -B 选项以字节而不是位为单位显示输出,这是默认设置。
$ iftop -B
查看帮助手册
man iftop
Linux arp 命令
系统保存一个 IP 地址表及其对应的 MAC 地址;这是ARP查找表。
如果我们尝试连接到 IP 地址,路由器将检查 MAC 地址。
如果系统缓存它,则不会使用 ARP 表。
要查看 arp 表,请使用 arp 命令:
$ arp
默认情况下,arp 命令显示主机名,我们可以像这样显示 IP 地址:
$ arp -n
我们可以像这样从 arp 表中删除条目:
$ arp -d HWADDR
使用 dig 和 host 命令获取 DNS 记录
我们可以使用 dig 命令来验证 DNS 映射、主机地址、MX 记录和所有其他 DNS 记录,以便更好地了解 DNS 拓扑。
dig 命令是 nslookup 命令的替代。
$ dig google.com
dig 命令默认搜索 A 记录,我们可以获取特定记录类型的信息,例如 MX 记录或者 NS 记录。
$ dig google.com MX
我们可以使用 ANY 查询获取所有类型的记录。
$ dig google.com ANY
dig 命令进行反向查找以获取 DNS 信息,如下所示:
$ dig –x 8.8.8.8
dig 命令使用 /etc/resolv.conf 中列出的服务器进行查询。
host 命令类似于 dig 命令。
$ host –a google.com
此外,我们可以使用 host 命令执行反向查找。
$ host 8.8.8.8
所以这两个命令的工作方式相似,但 dig 命令提供了更高级的选项。
使用 ss 命令检查连接性能
套接字统计命令 ss 是 netstat 的替代品,它比 netstat 更快并提供更多信息。
ss 命令直接从内核获取其信息,而不是像 netstat 命令那样依赖 /proc 目录。
$ ss | less
此命令输出所有 TCP、UDP 和 UNIX 套接字连接,并将结果通过管道传送到 less 命令以便更好地显示。
我们可以将此命令与 -t 结合以显示 TCP 套接字或者 -u 以显示 UDP 或者 -x 以显示 UNIX 套接字。
并且我们应该将 -a 选项与这些选项中的任何一个结合使用以显示已连接和正在侦听的套接字。
$ ss -ta
要列出所有已建立的 IPV4 TCP 套接字,请使用以下命令:
$ ss -t4 state established
列出所有关闭的 TCP 状态:
$ ss -t4 state closed
我们可以使用 ss 命令显示来自特定 IP 的所有连接端口:
$ ss dst XXX.XXX.XXX.XXX
我们可以按特定端口进行过滤,如下所示:
$ ss dst XXX.XXX.XXX.XXX:22