在实际的网络排错、运维诊断、或者是开发过程中,熟练运用 Linux 或者 Windows 当中的有关网络工具,能够助力我们更迅速更精准地定位故障。因而,今天给大家分享几款必掌握的网络利器。
1.nc命令
在 Linux 中,nc
命令即netcat
命令,它被称为网络工具中的“瑞士军刀”,是一个功能强大的网络工具。
nc命令主要用于以下几个方面:
端口扫描:可以用来检测目标主机的特定端口是否开放。
例如:nc -v -z [目标主机] [端口范围] [可以扫描指定的端口范围]
简单的 TCP 和 UDP 连接:建立 TCP 或 UDP 连接并进行数据传输。
作为客户端连接服务器:nc [服务器地址] [端口]
作为服务器监听端口:nc -l [端口]
完整方法:
nc [-hlnruz][-g<网关>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>][-v<执行过程>][-w<超时秒数>][主机名称][通信端口]
参数说明:
参数 | 描述 |
---|---|
-g <网关> | 设置路由器跃程通信网关,最多可设置8个。 |
-G <指向器数目> | 设置来源路由指向器,其数值为4的倍数。 |
-h | 在线帮助。 |
-i <延迟(秒)> | 设置时间间隔,以便传送信息及扫描通信端口。 |
-l | 使用监听模式,管控传入的资料。 |
-n | 直接使用IP地址,而不通过域名服务器。 |
-o <输出文件> | 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。 |
-p <通信端口> | 设置本地主机使用的通信端口。 |
-r | 随机指定本地与远端主机的通信端口。 |
-s <源地址> | 设置本地主机送出数据包的IP地址。 |
-u | 使用UDP传输协议。 |
-v | 显示指令执行过程。 |
-w <超时(秒)> | 设置等待连线的时间。 |
-z | 使用0输入/输出模式,只在扫描通信端口时使用。 |
详细使用例
TCP端口扫描
扫描UDP端口
扫描指定端口
2.ping命令
ping
命令是一种常用的网络工具,用于测试网络连接的可达性和质量。
ping 是“Packet Internet Groper”(分组网间探测)的缩写。它通过向目标主机发送 ICMP(Internet Control Message Protocol,互联网控制消息协议)回显请求数据包,并等待目标主机返回 ICMP 回显应答数据包,来确定目标主机是否可达以及网络延迟等信息。
(ICMP数据报格式)
ping 命令具有以下主要作用和特点:
- 检测网络连接:能够判断计算机与目标主机之间是否能够建立通信连接。
- 测量网络延迟:显示数据包从发送到接收所经历的时间,即往返时间(Round-Trip Time,RTT),从而评估网络的响应速度。
- 统计丢包率:通过多次发送数据包并统计未收到应答的次数,计算数据包丢失的比例。
例如,在 Windows 系统中,在命令提示符下输入 ping 目标主机的 IP 地址或域名 ,如 ping www.yuanshen.com
,就会开始向米哈游(实际上是某云厂商)的服务器发送数据包并接收响应,并显示相关的统计信息,包括响应时间、丢包情况等。
在 Linux 系统中,使用方法类似。
参数说明:
以kali的命令为例,输入ping -h查看详细参数
┌──(root㉿kali)-[/home/kali]
└─# ping -h
用法
ping [选项] <目的地>
选项:
<目的地> 域名或 IP 地址
-a 使用声音提示的 ping
-A 使用自适应的 ping
-B 固定源地址
-c <计数值> 在收到 <计数值> 个回复后停止
-C 在创建套接字时调用 connect() 系统调用
-D 打印时间戳
-d 使用 SO_DEBUG 套接字选项
-e <标识符> 为 ping 会话定义标识符,默认对于 SOCK_RAW 是随机的,对于 SOCK_DGRAM 是内核定义的
暗示使用 SOCK_RAW(对于 IPv4 仅当标识符为 0 时)
-f 洪水式 ping
-h 打印帮助并退出
-I <接口> 接口名称或地址
-i <间隔> 发送每个数据包之间的间隔(秒)
-L 抑制多播数据包的环回
-l <预加载> 在等待回复时发送 <预加载> 数量的数据包
-m <标记> 标记外出的数据包
-M <pmtud 选项> 定义最大传输单元发现,可以是 <do|dont|want> 之一
-n 不进行域名解析
-O 报告未完成的回复
-p <模式> 填充字节的内容
-q 安静输出
-Q <服务类型> 使用服务质量 <服务类型> 位
-s <大小> 使用 <大小> 作为要发送的数据字节数
-S <大小> 使用 <大小> 作为 SO_SNDBUF 套接字选项值
-t <生存时间> 定义生存时间
-U 打印用户到用户的延迟
-v 详细输出
-V 打印版本并退出
-w <截止时间> 回复等待 <截止时间>(秒)
-W <超时> 等待响应的时间
IPv4 选项:
-4 使用 IPv4
-b 允许对广播地址进行 ping
-R 记录路由
-T <时间戳选项> 定义时间戳,可以是 <tsonly|tsandaddr|tsprespec> 之一
IPv6 选项:
-6 使用 IPv6
-F <流标签> 定义流标签,默认是随机的
-N <节点信息选项> 使用 ICMP6 节点信息查询,尝试 <help> 作为参数
更多细节请参见 ping(8)。
一些其它的说明
TTL
是 Time To Live生存时间的缩写。在 IP 数据包中,TTL 是一个 8 位字段,它指定了数据包在网络中可以经过的最大跳数(路由器数量)。每经过一个路由器,TTL 值就会减 1,当 TTL 减为 0 时,数据包将被丢弃,以防止数据包在网络中无限循环。
“Request Time Out”请求超时表示发送的 Ping 数据包在指定时间内没有收到目标主机的响应。这可能是由于网络拥塞、目标主机繁忙、路由问题或目标主机不可达等原因导致的。
“Destination host Unreachable”目标主机不可达表示在尝试将数据包发送到目标主机时,网络无法找到到达该目标的路径。这可能是因为目标主机不存在、网络配置错误、中间路由器故障等。
“Bad IP Address”错误的 IP 地址意味着您输入的用于 Ping 操作的 IP 地址是无效的或不存在的。
例如,如果您尝试 Ping 一个不存在的 IP 地址,可能会收到“Bad IP Address”的提示。如果网络存在故障,可能会收到“Request Time Out”或“Destination host Unreachable”。
“Source quench received” ICMP源抑制,该信息比较特殊,出现的机率很少。表示对方或中途的服务器繁忙无法回应。通常是由于发包发太多了,早该少发发了。
3. ifconfig/ipaddr 命令
在 Linux 中,ifconfig
和 ip addr
都是用于查看和配置网络接口信息的命令,但它们有一些区别。
ifconfig
是一个较旧的命令,用于显示网络接口的配置信息,如 IP 地址、子网掩码、广播地址等。它还可以用于临时设置网络接口的参数,如激活或禁用接口、设置 IP 地址等。
例如,要查看所有网络接口的信息,可以输入 ifconfig
命令。
然而,ifconfig
命令在一些较新的 Linux 发行版中可能已被弃用或不再默认安装。
ip addr
是 iproute2
工具集的一部分,是一个功能更强大和灵活的命令,用于查看和管理网络接口的地址信息。
iproute2是一组集成了网络配置指令ip的开源软件包,ip指令功能齐全,可以配置和查看网络接口(link)、网络接口的地址(address)、ARP(neighbour)、路由(route)、路由策略数据库(rule)、隧道(tunnel)等
使用 ip addr
命令可以获取更详细和准确的网络接口信息,包括链路层地址(MAC 地址)、接口状态、IP 地址的类型(IPv4 或 IPv6)等。
例如,输入 ip addr
可以查看网络接口的详细地址信息。
总的来说,ip addr
逐渐取代了 ifconfig
,成为在 Linux 中管理网络接口地址的首选命令。
4. tcpdump 命令
在 Linux 中,tcpdump
命令是一个强大的网络数据包捕获和分析工具。
它可以让您在网络接口上捕获流经的数据包,并根据您指定的各种条件进行过滤和显示。
tcpdump
的主要特点和功能包括:
-
数据包捕获:能够抓取网络接口上传输的各种类型的数据包,如 TCP、UDP、ICMP 等。
-
过滤条件:您可以使用丰富的表达式来定义捕获数据包的条件,例如基于源和目标 IP 地址、端口号、协议类型等。
-
详细信息显示:它会以详细的格式显示捕获到的数据包的信息,包括数据包的头部字段、数据内容等。
-
实时监控:可以实时捕获和显示网络数据包,帮助您及时了解网络活动。
-
保存数据包:能够将捕获到的数据包保存到文件中,以便后续分析。
详细参数
参数 | 描述 |
---|---|
-A | 以ASCII码格式打印出所有数据包,并将链路层的头部最小化; |
-b | 在数据链路层上选择协议,包括IP、ARP、RARP、IPX; |
-c | 指定抓取数据包的数量; |
-d | 将匹配到的数据包以人们能够理解的汇编格式输出; |
-dd | 将匹配到的数据包以C语音程序段的格式输出; |
-ddd | 将匹配到的数据包以十进制的格式输出; |
-D | 打印出系统中所有可以用tcpdump截取数据包的网络接口; |
-e | 在输出行打印出数据链路层的头部信息; |
-f | 将外部的因特网地址以数字的形式打印出来; |
-F | 从指定的文件中读取表达式,忽略命令行中给出的表达式; |
-i | 指定监听网络接口; |
-I | 使用标准输出变为缓冲行形式,可以把数据导出到文件; |
-L | 列出网络接口的已知数据链路; |
-n | 不把网络地址转换成名称; |
-nn | 不进行端口名称的转换; |
-N | 不输出主机名中的域名部分; |
-t | 不打印每行中的时间戳; |
-p | 不将网络接口设置为混杂模式; |
-q | 快速输出,输出较少的协议信息; |
-r | 从指定的文件中读取数据包,一般这个文件由-w参数产生; |
-s | 从每个数据包中读取最开始的snaplen个字节,而不是默认的68字节; |
-S | 将TCP的序列号以绝对值的形式输出,不是相对值; |
-t | 不在每一行输出时间戳; |
-tt | 在每一行中输出非格式化的时间戳; |
-ttt | 输出本行和前面一行之间的时间戳; |
-tttt | 在每一行中输出由data处理的默认格式的时间戳; |
-T | 将监听到的数据包直接解释为指定类型的报文,常见的类型有RPC远程过程调用和SNMP简单网络管理协议; |
-v | 输出稍微详细的信息,例如IP报文中的TTL和服务类型信息; |
-vv | 输出相信的信息; |
-w | 将输出写入文件; |
例如,如果您只想捕获来自特定 IP 地址的 TCP 数据包,可以使用类似 tcpdump tcp and src 192.168.1.100
的命令。
以下是一些 tcpdump
的使用案例:
案例 1:捕获特定接口的所有数据包
tcpdump -i eth0
上述命令将在 eth0
接口上捕获所有的数据包。
案例 2:捕获特定协议的数据包(如 TCP 协议)
tcpdump tcp
案例 3:捕获特定源 IP 地址的数据包
tcpdump src 192.168.1.100
案例 4:捕获特定目的 IP 地址和端口的数据包
tcpdump dst 192.168.1.200 and dst port 80
案例 5:捕获特定网络范围内的数据包
tcpdump net 192.168.0.0/24
案例 6:捕获特定主机之间的数据包
tcpdump host 192.168.1.100 and 192.168.1.200
案例 7:将捕获的数据包保存到文件
tcpdump -w packets.pcap
上述命令会将捕获的数据包保存到名为 packets.pcap
的文件中,后续可以使用其他工具(如 Wireshark)对该文件进行分析。
案例 8:捕获特定协议和端口的数据包,并以更详细的格式显示
tcpdump -v tcp port 22
案例 9:捕获特定网卡访问原神官网的数据包并保存到文件 QiDong.pcap
tcpdump -i eth0 -w QiDong.pcap host www.yuanshen.com
这些案例只是 tcpdump
命令的一些常见用法,您可以根据具体的需求灵活组合和调整命令选项。
tcpdump
在网络故障排查、安全审计、协议分析等方面都非常有用。
5. lsof 命令
在 Linux 系统中,lsof
(List Open Files)命令用于列出当前系统中打开的文件和进程的相关信息。
它的主要用途包括:
-
查看进程打开的文件:包括普通文件、目录、网络套接字、设备等。这对于了解进程正在使用哪些资源非常有用。
-
查找特定文件或目录被哪些进程使用:如果您想知道某个文件或目录正在被哪些进程访问或占用,可以通过
lsof
命令来获取相关信息。 -
诊断进程与文件系统的关联问题:例如,当无法删除或修改某个文件时,可以使用
lsof
查看是否有进程正在使用该文件。 -
监控系统资源使用情况:帮助管理员了解系统中文件资源的分配和使用状况。
以下是 lsof
命令的一些常见参数及其详细解释:
-a
:表示两个或多个选项必须同时满足。-c
string
:显示命令名称以string
开头的进程所打开的文件。-d
fd
:显示指定文件描述符的使用情况。可以是数字表示的文件描述符,也可以是多个文件描述符用逗号分隔,如4,5
。-i
:用于显示网络连接相关的信息。-i 4
:仅显示 IPv4 的网络连接。-i 6
:仅显示 IPv6 的网络连接。-i tcp
:显示 TCP 协议的网络连接。-i udp
:显示 UDP 协议的网络连接。
-n
:不将 IP 地址转换为主机名,端口号转换为服务名称。-p
PID
:显示指定进程 ID 的进程所打开的文件。-u
username
:显示指定用户打开的文件。-F
fmt
:指定输出格式,fmt
可以是c
(表示命令名)、p
(表示进程 ID)、f
(表示文件描述符)等。-h
:显示帮助信息。
这些只是 lsof
命令的部分常用参数,您可以通过 man lsof
命令获取更完整和详细的参数说明及用法示例。
例如,要查看某个端口被哪些进程占用,可以使用 lsof -i :端口号
;要查看某个文件被哪些进程使用,使用 lsof 文件名
。
以下是一些 lsof
命令的使用案例:
案例 1:查看所有进程打开的文件
lsof
案例 2:查看某个进程打开的文件
假设进程 ID 为 1234:
lsof -p 1234
案例 3:查看某个用户打开的文件
假设用户名为 user1
:
lsof -u user1
案例 4:查看某个端口相关的进程和文件
假设端口为 80 :
lsof -i :80
案例 5:查看某个文件被哪些进程使用
假设文件名为 file.txt
:
lsof file.txt
案例 6:查看网络连接相关的信息(仅 IPv4)
lsof -i 4
案例 7:查看网络连接相关的信息(仅 TCP 协议)
lsof -i tcp
案例 8:不将 IP 地址和端口号转换为名称
lsof -n
6. netstat 命令
在 Linux 中,netstat
(Network Statistics)命令用于显示网络连接、路由表、接口统计信息、多播成员等与网络相关的统计信息。
它可以提供有关系统当前网络状态的详细信息,帮助管理员诊断网络问题、监控网络活动以及了解网络配置。
netstat
命令的一些常见参数及其详细解释:
-a
或--all
:显示所有的连接和监听端口,包括处于监听状态和非监听状态的套接字。-t
或--tcp
:仅显示 TCP 协议的连接。-u
或--udp
:仅显示 UDP 协议的连接。-n
或--numeric
:以数字形式显示地址和端口号,而不尝试将其转换为主机名和服务名。-l
或--listening
:仅显示处于监听状态的套接字。-p
或--program
:显示与每个连接或监听端口相关的进程 ID 和进程名称。-r
或--route
:显示内核路由表。-e
或--extend
:显示更多详细的信息。-s
或--statistics
:显示各种网络协议的统计信息。
通过组合这些参数,可以根据具体需求获取所需的网络状态信息。例如,netstat -atun
会以数字形式显示所有的 TCP 连接。您可以通过在终端中输入 man netstat
来获取更完整和详细的参数说明及用法示例。
以下是一些 netstat
命令的使用案例:
案例 1:显示所有活动的连接
netstat -a
案例 2:仅显示 TCP 连接
netstat -t
案例 3:仅显示 UDP 连接
netstat -u
案例 4:以数字形式显示所有连接(包括地址和端口)
netstat -an
案例 5:显示处于监听状态的端口
netstat -l
案例 6:显示监听的 TCP 端口
netstat -lt
案例 7:显示监听的 UDP 端口
netstat -lu
案例 8:显示与每个连接相关的进程 ID 和名称
netstat -p
案例 9:查看路由表信息
netstat -r
案例 10:显示网络接口统计信息
netstat -i
案例 11:显示 TCP 连接的统计信息
netstat -st
这些案例可以帮助您在不同的场景下获取所需的网络状态和统计信息,以便进行网络故障排查、性能监控等工作。
7. iftop命令
iftop 是一款用于监控网络流量的开源命令行工具,它能够实时显示网络接口流量的信息,包括接收和发送的数据量、速度等。iftop 通过抓包来实时获取网络流量信息,并以直观的形式显示在终端上。
iftop 的主要功能包括:
- 监控实时网络流量:可以实时监控网络接口上进出的数据量、速率、源 IP 地址和目标 IP 地址等信息,帮助了解网络流量分布情况。
- 显示连接到本机的主机:能够显示连接到本机的所有主机的 IP 地址和域名,以及它们之间的网络流量情况。
- 按流量排序:可根据数据包的大小或带宽占用情况对网络流量进行排序,以便直观地了解哪些连接占用了较多的网络资源。
- 过滤显示:支持通过指定源 IP 地址、目标 IP 地址、端口号等条件来过滤显示网络流量,方便关注特定的流量。
要使用 iftop 命令,通常直接在终端中输入iftop
即可开始监控网络流量。默认情况下,iftop 会显示所有网络接口的信息。也可以通过一些参数来指定特定的监控选项,例如:
-i
:指定要监控的网络接口,如iftop -ieth1
。-n
:不进行主机名的 DNS 解析,直接显示 IP 地址。-b
:以字节(bytes)为单位显示流量(默认是比特 bits)。-f
:显示特定网段的进出流量,如iftop -f 192.168.2.110/24
。
在 iftop 界面中,通常会显示以下详细的网络流量信息:
- 本地 IP 和端口。
- 远程 IP 和端口。
- 数据包的数量和字节数。
- 实时上传和下载速度。
iftop 还提供了一些快捷键用于交互操作,以便进行不同的显示和过滤设置,常见的快捷键包括:
h
:显示帮助菜单。n
:开启或关闭主机名的 DNS 解析。p
:开启或关闭目标和源端口的显示。p
:暂停刷新屏幕。s
:显示或隐藏源主机的 IP 或主机名。t
:切换显示发送和接收流量的方式,如仅显示发送流量、仅显示接收流量或同时显示发送和接收流量。q
:退出 iftop。j/k
:分别向下和向上滚动屏幕,当屏幕不足以显示所有连接时使用。<
:通过源名称进行排序。>
:通过目标名称进行排序。1/2/3
:通过第一、第二、第三列进行排序。o
:冻结排序方式,关闭 iftop 对连接的滚动排序。
如果系统中没有安装 iftop,可以使用相应的包管理工具进行安装。例如,在 CentOS 或 RHEL 系统上使用yum install iftop -y
命令,在 Ubuntu 或 Debian 系统上使用sudo apt-get install iftop
命令。