linux常用网络工具汇总一

1. 端口状态

1.1 ss

Linux下的ss命令是Socket Statistics的缩写,也被称为IPC(Inter-Process Communication)套接字统计。这是一个强大的网络管理命令,主要用于获取系统中socket的统计信息,可以帮助系统管理员诊断和排查网络问题,包括检查当前网络连接及端口状态、搜索网络问题、统计网络情况、过滤网络数据等等,从而解决网络问题,节省管理工作量,保证网络安全。它在处理大量socket连接时,比netstat更快更高效。这是因为ss命令利用了TCP协议栈中的tcp_diag模块,这个模块可以获得Linux内核中的第一手信息,因此其性能优于其他工具。

这个命令在redhat系一般都是自带的,所以不需要单独安装

[root@node-252 ~]# yum provides ss
...
iproute-4.11.0-30.el7.x86_64 : Advanced IP routing and network device configuration tools
  • 常用选项
    如下列举一些常用的选项,若需要了解更多,可以使用 ss --help 查看
  -n, --numeric:以数字格式显示地址和端口。使用此选项可以避免将地址和端口转换为主机名或服务名,从而加快查询速度
  -t, --tcp:仅显示TCP套接字信息
  -u, --udp:仅显示UDP套接字信息
  -l, --listening:仅显示处于监听状态的套接字
  -a, --all:显示所有套接字信息,包括监听和非监听状态的套接字
  -r, --resolve:尝试解析服务名为主机名
  -p, --processes:显示与每个套接字相关联的进程信息,包括进程ID和进程名称
  -e, --extended:显示详细的TCP套接字信息
  -s, --summary:显示套接字统计摘要信息。

这些选项一般都是组合使用,例如:-ant,-nltpu

[root@node-252 ~]# ss -nlptu|grep -w 22
tcp    LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=1141,fd=3))
tcp    LISTEN     0      128    [::]:22                 [::]:*                   users:(("sshd",pid=1141,fd=4))

显示为已建立连接状态(established)的ssh

[root@node-252 ~]# ss -o state 'established' '( dport = :ssh or sport = :ssh )'
Netid  Recv-Q Send-Q                                  Local Address:Port                                                   Peer Address:Port
tcp    0      0                                     192.168.202.128:ssh                                                   192.168.202.1:vrcommerce            timer:(keepalive,112min,0)
tcp    0      48                                    192.168.202.128:ssh                                                   192.168.202.1:ema-sent-lm           timer:(on,376ms,0)

源地址和目标地址过滤

ss src ip / ss dst ip

[root@node-252 ~]# ss dst 192.168.202.1
Netid  State      Recv-Q Send-Q                             Local Address:Port                                              Peer Address:Port
tcp    ESTAB      0      0                                192.168.202.128:ssh                                              192.168.202.1:vrcommerce
tcp    ESTAB      0      48                               192.168.202.128:ssh                                              192.168.202.1:ema-sent-lm

已建立的连接

[root@node-252 ~]# ss -st
Total: 1513 (kernel 2244)
TCP:   36 (estab 2, closed 19, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*         2244      -         -
RAW       1         0         1
UDP       11        8         3
TCP       17        9         8
INET      29        17        12
FRAG      0         0         0

State      Recv-Q Send-Q                                Local Address:Port                                                 Peer Address:Port
ESTAB      0      0                                   192.168.202.128:ssh                                                 192.168.202.1:vrcommerce
ESTAB      0      48                                  192.168.202.128:ssh                                                 192.168.202.1:ema-sent-lm

1.2 netstat

netstat命令是一个监控TCP/IP网络的非常有用的工具,它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。

[root@node-252 ~]# yum provides netstat
...
net-tools-2.0-0.25.20131004git.el7.x86_64 : Basic networking tools

这个命令包含在net-tools工具包中

  • 常用选项
	-a或--all:显示所有连线中的Socket;
	-A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
	-c或--continuous:持续列出网络状态;
	-C或--cache:显示路由器配置的快取信息;
	-e或--extend:显示网络其他相关信息;
	-F或--fib:显示FIB;
	-g或--groups:显示多重广播功能群组组员名单;
	-h或--help:在线帮助;
	-i或--interfaces:显示网络界面信息表单;
	-l或--listening:显示监控中的服务器的Socket;
	-M或--masquerade:显示伪装的网络连线;
	-n或--numeric:直接使用ip地址,而不通过域名服务器;
	-N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
	-o或--timers:显示计时器;
	-p或--programs:显示正在使用Socket的程序识别码和程序名称;
	-r或--route:显示Routing Table;
	-s或--statistice:显示网络工作信息统计表;
	-t或--tcp:显示TCP传输协议的连线状况;
	-u或--udp:显示UDP传输协议的连线状况;
	-v或--verbose:显示指令执行过程;
	-V或--version:显示版本信息;
	-w或--raw:显示RAW传输协议的连线状况;
	-x或--unix:此参数的效果和指定"-A unix"参数相同;
	--ip或--inet:此参数的效果和指定"-A inet"参数相同。

常用选项组合

[root@node-252 ~]# netstat -nlput
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN      773/rpcbind
tcp        0      0 127.0.0.1:10257         0.0.0.0:*               LISTEN      785/kube-controller
tcp        0      0 192.168.122.1:53        0.0.0.0:*               LISTEN      1903/dnsmasq
...

netstatss命令功能大体相同,选项也差不多,但是在高并发的时候不建议使用,容易卡死

1.3 lsof -i

lsof命令一般用来列出打开的文件,不过-i选项能够查看端口状态

[root@node-252 ~]# lsof -i:22
COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
sshd    1141 root    3u  IPv4  33782      0t0  TCP *:ssh (LISTEN)
sshd    1141 root    4u  IPv6  33784      0t0  TCP *:ssh (LISTEN)

2. 探测端口

测试服务器端口是否打开的方法有多种,包括使用命令行工具、在线工具和系统工具。下面列举几个常用的命令

2.1 telnet

telnet命令通常用来远程登录。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。终端使用者可以在telnet程序中输入命令,这些命令会在服务器上运行,就像直接在服务器的控制台上输入一样。要开始一个 telnet会话,必须输入用户名和密码来登录服务器。

  • 常用方法
    telnet ip port
[root@node-252 ~]# telnet 192.168.202.129 22
Trying 192.168.202.129...
Connected to 192.168.202.129.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4

2.2 nmap

nmap(网络映射器)是一个功能强大的网络扫描工具,用于探测主机、服务和网络的安全审计和发现。这个工具属实太强大了,据说能出一本600页的书,这里就不展开了,只列举一些常用选项。

默认扫描使用TCP协议的端口

  • 部分选项
#目标主机选项:‌
-p:‌指定扫描的端口范围,‌例如-p 1-1000表示扫描1到1000号端口。‌
-F:‌快速扫描,‌仅扫描常见的100个端口。‌
-r:‌顺序扫描,‌按照从小到大的顺序进行端口扫描。‌

#输出选项:‌
-oX:‌将扫描结果保存为XML格式,‌例如nmap 192.168.96.4 -oX myscan.xml。‌
-iL:‌从文件中读取目标主机列表进行扫描。‌

#扫描速度和类型选项:‌
-T:‌调整扫描速度,‌数字越大速度越快,‌但也可能更容易被防火墙拦截。‌例如,‌-T4表示中等速度。‌
-sV:‌版本检测,‌用于检测端口上运行的服务及其版本信息。‌
-O:‌操作系统检测,‌用于检测目标主机的操作系统类型。‌
-A:‌全面扫描,‌包括版本检测、‌操作系统检测等,‌但耗时较长。‌

#其他选项:‌

-Pn:‌跳过主机发现阶段,‌直接对目标主机进行扫描,‌适用于目标主机屏蔽了ping请求的情况。‌
-f:‌逃逸防火墙,‌用于绕过目标防火墙的过滤。‌
--script:‌执行Nmap自带的脚本进行额外的检查,‌如密码破解、‌SQL注入检测等

不带参数(常用)

[root@node-252 ~]# nmap 192.168.202.129

Starting Nmap 6.40 ( http://nmap.org ) at 2024-08-01 15:15 CST
Nmap scan report for 192.168.202.129
Host is up (0.00042s latency).
Not shown: 998 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
111/tcp open  rpcbind
MAC Address: 00:0C:29:B8:EC:0D (VMware)

Nmap done: 1 IP address (1 host up) scanned in 1.99 seconds

扫描指定端口

nmap -p 22 192.168.202.129

扫描使用UDP协议指定端口

nmap -sU  192.168.202.129

检测系统

nmap -O 192.168.202.129

脚本扫描,使用 nmap 脚本引擎执行特定的脚本,如 http-titlessl-heartbleed 等。

nmap --script <script> 192.168.10.51

扫描全部 TCP 端口

nmap -p- 192.168.10.51

快速扫描(常用)

nmap -F 192.168.202.129

保存扫描结果

nmap -F 192.168.202.129 -oN output.txt

服务版本检测

nmap -sV 192.168.10.51

批量扫描IP

nmap -sP 192.168.202.1-225

批量扫描端口,端口列表 Port List

nmap -p135,139 192.168.80.134

批量扫描端口,端口范围 Port Range

nmap -p1-1000 192.168.80.134

所有端口 ALL Ports

nmap -p1-65535 192.168.80.134 --open

详细参考 如何使用 NMAP 命令进行网络扫描

1.3 nc

ncnetcat的简写,是一个功能强大的网络工具。nc命令在linux系统中实际命令是ncat,nc是软连接到ncat,nc的主要命令如下。

  • 实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
  • 端口的扫描,nc可以作为client发起TCP或UDP连接
  • 机器之间传输文件
  • 机器之间网络测速
[root@node-252 ~]# yum provides nc
2:nmap-ncat-6.40-19.el7.x86_64 : Nmap's Netcat replacement
  • 常用参数
 -l 或 –listen:在服务器模式下监听指定端口,等待客户端连接。
   -n:禁用DNS反向解析,加快连接速度。
   -v:显示详细的调试信息。
   -z:仅进行端口扫描,不进行实际连接。
   -u:使用UDP协议进行连接。

探测端口

[root@node-252 ~]# nc -nv 192.168.202.129 22
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.202.129:22.
SSH-2.0-OpenSSH_7.4

终端之间通信

[root@node-252 ~]# nc -lp 666
echo 123


[root@node-251 ~]# nc -nv 192.168.202.128 666
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.202.128:666.
echo 123

测试UDP端口

[root@node-252 ~]# nc -lup 666

[root@node-251 ~]# nc -nuv 192.168.202.128 666
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.202.128:666.

3 测试网速

3.1 iftop

iftop命令是一种网络监测工具,它类似于Linux中的其他监测工具,如top、iotop等。但iftop是一个独立的命令,并不依赖于其他工具或服务。

iftop命令可以帮助我们查看服务器上网络接口的实时流量情况,包括流入和流出的数据量、数据包数量、流量占用比例等信息。此外,iftop还具有过滤、排序功能,用于更好地监测特定网络流量。

[root@node-252 ~]# yum provides iftop
iftop-1.0-0.21.pre4.el7.x86_64 : Command line tool that displays bandwidth usage on an interface
  • 常用参数
-h 显示帮助。
-n 不执行主机名DNS解析(即直接显示IP地址而不是主机名)
-N 不执行端口转换成服务操作(直接显示端口数字)
-p 运行在混杂模式(此时会显示整个网段中其他主机`部分`流量)
-b 不显示流量的图形条
-B 采用字节(bytes)显示带宽
-a 采用以包为单位的带宽
-i 监听在指定网络接口
-f 使用过滤代码来选择计数的数据包(默认是none,但是只计算IP包)
-F IPv4 显示网络的in/out数据流
-G IPv6 显示网络的in/out数据流
-l 打开屏幕过滤功能,输入要过滤的字符。比如输入相应IP地址,回车后,屏幕就只显示这个IP相关的流量信息。
-p 显示端口
-m 设置带宽等级的上限
-c 指定替代的配置文件
-t 使用不带ncurses 的文本界面,并将输出打印到STDOUT
-o 2s 第一列排序 (2s traffic average)

不带参数,默认监控的是第一块网卡。

interface: ens33
IP address is: 192.168.202.128
MAC address is: 00:0c:29:d4:37:b6

└──────────────────────────────┴───────────────────────────────┴──────────────────────────────┴───────────────────────────────┴───────────────────────────────
192.168.202.128                                                   => 192.168.202.1                                                      960b    939b    939b
                                                                  <=                                                                    912b    427b    427b
192.168.202.128                                                   => 192.168.71.251                                                     240b    240b    240b
                                                                  <=                                                                      0b      0b      0b
255.255.255.255                                                   => 192.168.202.1                                                        0b      0b      0b
                                                                  <=                                                                    216b     72b     72b
                                                                  
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
TX:             cum:    884B    peak:   1.30Kb                                                                                rates:   1.17Kb  1.15Kb  1.15Kb
RX:                     374B            1.10Kb                                                                                         1.10Kb   499b    499b
TOTAL:                 1.23KB           2.27Kb                                                                                         2.27Kb  1.64Kb  1.64Kb

可以使用 iftop 命令的 -n选项,禁用主机名的解释。如果在正在运行的 iftop 会话中可以按 n 键打开或者关闭主机名的 DNS 解释

1. iftop的显示说明

  • 第一部分
    iftop 输出最上面的一行,此行信息是流量刻度,用于显示网卡带宽流量。

  • 第二部分
    中间的<= =>这两个左右箭头,表示的是流量的方向。
    其中又分别分为左、中、右三列。左列和中列,记录了哪些 IP 或主机正在和本机的网络进行连接。中列的“=>”代表发送数据,“<=”代表接收数据,通过这个指示箭头可以很清晰地知道两个 IP 之间的通信情况。最右列又分为三小列,这些实时参数分别表示外部 IP 连接到本机 2 秒内、10 秒内和 40 秒内的平均流量值。

  • 第三部分
    分割线最下面的一部分,用来统计网卡流量信息。

    TX:发送流量
    RX:接收流量
    TOTAL:总流量
    Cumm:运行iftop到目前时间的总流量,也就是累计值
    peak:流量峰值
    rates:分别表示过去 2s 10s 40s 的平均流量
    

指定网卡

iftop -i ens33

显示某个网段进出封包流量

iftop -F 192.168.202.129/24

按照流量排序
iftop可以按照流量大小对连接进行排序,从而帮助我们快速识别占用带宽较多的连接。通过按流量排序,我们可以发现网络中的瓶颈和异常情况。
排序方式
-o 2s:按第一列排序(2秒平均流量)
-o 10s:按第二列排序(10秒平均流量)【默认】
-o 40s:按第三列排序(40秒平均流量)
-o source:按源地址排序
-o destination:按目标地址排序

过滤显示连接

iftop -n -P -i ens192 -f "src port 1019"
 
#基于端口的过滤
iftop -f "port 80,443" 
#基于IP基础和端口的过滤
iftop -f "src host 192.168.1.100 and dst port 80"
iftop -f "dst host 8.8.8.8"

按键

h:显示帮助菜单
n:开启 / 关闭主机名的 DNS 解析,如果可以 iftop 可以将 IP 地址解释为主机名则显示主机的名称,否则显示 IP 地址。
N:开启 / 关闭服务名称的解释,例如,本地主机连接远程的主机的 443 端口,iftop 将会在远程主机 IP 地址后面添加服务的名称www.myfreax.com:https。
p:开启 / 关闭目标和源端口的显示
P:暂停刷新屏幕,注意:这仅仅暂停主要窗口部分的刷新,屏幕底部的统计值依然自动刷新。
s:显示或者隐藏源主机的 IP 或主机名。
S:显示 / 关闭源端口。
t:切换显示发送和接收流量的三种方式,第一种是仅显示发送的流量,第二种是仅显示接收的流量,同时发送和接收的流量,也就是启动时的默认模式。
T:显示 / 关闭发送与接收流量统计,这将会在 2s 10s 40s 速率之前添加一列显示累计值。
q:退出 iftop

3.2 zabbix/prometheus

zabbix
prometheus

4. 进程流量

4.1 nethogs

nethogs是一个类似于Linux的top命令的开源的命令行工具,用来按进程或程序实时统计网络带宽使用率,它可以直观的显示每个进程占用的带宽。

不需要依赖载入某个特殊的内核模块。如果发生了网络阻塞你可以启动nethogs立即看到哪个PID造成的这种状况。这样就很容易找出异常占用带宽的程序。

直接安装即可

yum install -y nethogs
  • 常用参数
-V 	打印命令版本
-h 	打印帮助
-b 	bughunt模式
-d 	指定显示刷新频率,单位秒,默认1秒
-v 	指定流量单位模式(0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB)
-c 	设置刷新更新次数
-t 	tracemode模式,可以记录下每一次刷新的流量值
-p 	混杂模式下监听流量(不建议使用)
-s 	按照发送流量排序输出
-a 	监控所有网卡端口,包括环回接口

按键

q	退出
s	按照发送流量排序
r	按照接受流量排序
m	切换端口流量单位显示模式在B,KB,MB之间流量切换

nethogs命令默认监控所有物理网卡,可以后面接网卡名称方式指定监控某网卡流量,可以接多个网卡名称,网卡之间空格隔开。

nethogs

NetHogs version 0.8.5

    PID USER     PROGRAM                                                                                                  DEV        SENT      RECEIVED
   2172 root     sshd: root@pts/0                                                                                         ens33       0.092       0.047 KB/sec
    791 root     /opt/kubernetes/bin/kube-controller-manager                                                              ens33       0.029       0.000 KB/sec
      ? root     unknown TCP                                                                                                          0.000       0.000 KB/sec

  TOTAL                                                                                                                               0.121       0.047 KB/sec

指定网卡

nethogs ens33

指定网卡流量显示单位,默认KB,(0 = KB/s, 1 = total KB, 2 = total B, 3 = total MB)

nethogs -v 3

使用-a参数可以监控所有网卡流量,包括回环地址

nethogs –a

监控时刷新频率3秒总计2次

nethogs -d 3 -c 2

-t表示启用追踪模式(tracemode),可以记录每一次的值,也可以结合其他参数一起使用

[root@node-252 ~]# nethogs -t -d 10 -c 5 -v 3
Adding local address: 192.168.202.128
Adding local address: fe80::7fd7:bd03:f1c1:ee7c
Ethernet link detected
Waiting for first packet to arrive (see sourceforge.net bug 1019381)

Refreshing:
unknown TCP/0/0 0       0

Refreshing:
sshd: root@pts/0/2172/0 162.325 0.483897
192.168.202.128:38380-192.168.71.251:6443/0/0   0       5.72205e-05
/opt/kubernetes/bin/kube-controller-manager/791/0       0.000141144     0
unknown TCP/0/0 0       0

Refreshing:
sshd: root@pts/0/2172/0 162.325 0.483954
192.168.202.128:38380-192.168.71.251:6443/0/0   0       5.72205e-05
/opt/kubernetes/bin/kube-controller-manager/791/0       0.000423431     5.72205e-05
...

4.2 ntop

参考 NTOP使用指南

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值