Linux常用工具之网络管理
基本网络命令
命令 | 说明 |
---|---|
ip |
操纵路由来分配和配置网络参数 |
traceroute |
识别数据包到达主机的路径 |
tracepath |
在追踪网络主机的路径时,获取最大传输单元 |
ping |
通常用于检查主机和服务器之间的连接情况 |
ss |
获得有关网络套接字的详细信息 |
dig |
给出所有关于 DNS 名称服务器的必要信息 |
host |
输出特定域和主机的 IP 地址 |
hostname |
主要用于输出和更改主机名 |
curl |
在网络上通过各种协议传输数据 |
mtr |
ping 和 traceroute 的组合,用于诊断网络 |
whois |
获取有关注册的域名、IP 地址、名称服务器等信息 |
ifplugstatus |
检测本地以太网设备的链接状态 |
iftop |
监视与带宽有关的统计信息 |
tcpdump |
数据包嗅探和分析工具,用于捕获、分析和过滤网络流量 |
ethtool |
允许用户配置以太网设备 |
nmcli |
用于网络连接的故障排除工具 |
nmap |
主要用于审计网络安全 |
bmon |
开源工具,用于监控实时带宽 |
firewalld |
配置防火墙规则的 CLI 工具 |
iperf |
测量网络性能和调整的工具 |
speedtest-cli |
speedtest.net 的 CLI 工具,用于检查网速 |
vnstat |
主要用于监控网络流量和带宽消耗 |
ss
ss 是 Socket Statistics 的缩写。ss 命令可以用来获取 socket 统计信息,它显示的内容和 netstat 类似。但 ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快。当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。ss 命令利用到了 TCP 协议栈中 tcp_diag。tcp_diag 是一个用于分析统计的模块,可以获得 Linux 内核中第一手的信息,因此 ss 命令的性能会好很多。
常见命令
ss -t -a # 显示所有TCP连接
ss -s # 显示 Sockets 摘要
ss -l # 列出所有打开的网络连接端口
ss -pl # 查看进程使用的socket
ss -lp | grep 3306 # 找出打开套接字/端口应用程序
ss -u -a 显示所有UDP Sockets
ss -o state established '( dport = :smtp or sport = :smtp )' # 显示所有状态为established的SMTP连接
ss -o state established '( dport = :http or sport = :http )' # 显示所有状态为Established的HTTP连接
ss -o state fin-wait-1 '( sport = :http or sport = :https )' dst 193.233.7/24 # 列举出处于 FIN-WAIT-1状态的源端口为 80或者 443,目标网络为 193.233.7/24所有 tcp套接字
# ss 和 netstat 效率对比
time netstat -at
time ss
# 匹配远程地址和端口号
# ss dst ADDRESS_PATTERN
ss dst 192.168.1.5
ss dst 192.168.119.113:http
ss dst 192.168.119.113:smtp
ss dst 192.168.119.113:443
# 匹配本地地址和端口号
# ss src ADDRESS_PATTERN
ss src 192.168.119.103
ss src 192.168.119.103:http
ss src 192.168.119.103:80
ss src 192.168.119.103:smtp
ss src 192.168.119.103:25
netstat
Netstat 是一款命令行工具,可用于列出系统上所有的网络套接字连接情况,包括 tcp, udp 以及 unix 套接字,另外它还能列出处于监听状态(即等待接入请求)的套接字。如果你想确认系统上的 Web 服务有没有起来,你可以查看80端口有没有打开。
常见命令
# 列出所有端口
netstat -a | more
# 使用 -t 选项列出 TCP 协议的连接
netstat -at
# 使用 -u 选项列出 UDP 协议的连接
netstat -au
# 默认情况下 netstat 会通过反向域名解析技术查找每个 IP 地址对应的主机名。这会降低查找速度。如果你觉得 IP 地址已经足够,而没有必要知道主机名,就使用 -n 选项禁用域名解析功能
netstat -ant
# 任何网络服务的后台进程都会打开一个端口,用于监听接入的请求。这些正在监听的套接字也和连接的套接字一样,也能被 netstat 列出来。使用 -l 选项列出正在监听的套接字。
netstat -ntl
# 查看端口和连接的信息时,能查看到它们对应的进程名和进程号对系统管理员来说是非常有帮助的。举个栗子,Apache 的 httpd 服务开启80端口,如果你要查看 http 服务是否已经启动,或者 http 服务是由 apache 还是 nginx 启动的,这时候你可以看看进程名。使用 -p 选项查看进程信息
netstat -ntlp
# 使用 -ep 选项可以同时查看进程名和用户名
netstat -ntlep
# netstat 可以打印出网络统计数据,包括某个协议下的收发包数量
netstat -s
# 显示内核路由信息:使用 -r 选项打印内核路由信息。打印出来的信息与 route 命令输出的信息一样。我们也可以使用 -n 选项禁止域名解析。
netstat -rn
# -i打印网络接口信息.也可以 -e 选项和 -i 选项搭配使用,可以输出用户友好的信息
netstat -ie
# -c 选项持续输出信息
# 持续输出 TCP 协议信息
netstat -ct
tcpdump
tcpdump
是一个命令行实用工具,允许你抓取和分析经过系统的流量数据包。它通常被用作于网络故障分析工具以及安全工具。
常见命令
# tcpdump -D 命令列出可以抓包的网络接口
tcpdump -D
# 对指定网络接口抓包 tcpdump -i <网卡名>
tcpdump -i eth0
# -c 选项可以用于限制 tcpdump 抓包的数量
tcpdump -i eth0 -c 5
# 过滤数据包:只抓取tcp协议
tcpdump -i eth0 tcp
# 过滤数据包:抓取指定端口
tcpdump -i eth0 port 80
# tcpdump 默认是将 IP 地址和端口号解析为对应的接口名以及服务协议名称。而通常在网络故障排查中,使用 IP 地址和端口号更便于分析问题;所以通常用 -n 选项显示 IP 地址,-nn 选项显示端口号
tcpdump -i eth0 -n -nn
# 根据源 IP 地址或者目的 IP 地址或者主机名来筛选数据包
tcpdump -i eth0 src 10.20.0.1
tcpdump -i eth0 dst 10.20.0.1
# 使用多条件组合来筛选数据包,使用 and 以及 or 逻辑操作符来创建过滤规则。
tcpdump -i eth0 tcp and port 80
tcpdump -i eth0 src 10.20.0.1 and port 80
# 使用括号来创建更为复杂的过滤规则,但在 shell 中请用引号包含你的过滤规则以防止被识别为 shell 表达式
tcpdump -i eth0 "port 80 and (src 10.20.0.1 or src 54.204.39.132)"
# 输出详细的报文信息
tcpdump -i eth0 -v -vv
# -n 指定将每个监听到数据包中的域名转换成IP地址后显示,不把网络地址转换成名字;
# -nn 指定将每个监听到的数据包中的域名转换成IP、端口从应用名称转换成端口号后显示
tcpdump -i eth0 -n -nn
# 使用 -w 选项来保存数据包而不是在屏幕上显示出抓取的数据包.该命令将抓取的数据包保存到文件 <文件名>.pcap。后缀名 pcap 表示文件是抓取的数据包格式。
tcpdump -i eth0 -w proxy.pcap -W 2