Linux iptstate命令介绍
iptstate是一个用来显示iptables状态信息的命令,它可以实时地监控iptables的连接跟踪表,以及各种规则的命中情况。iptstate的全称是IP Tables State,它是基于ncurses库的一个文本界面程序,可以在终端中运行。iptstate可以帮助用户了解iptables的工作原理,以及检查iptables的配置是否正确。
Linux iptstate命令适用的Linux版本
iptstate命令适用于大多数Linux发行版,但是它需要安装iptables和ncurses两个软件包。如果你的系统没有安装这两个软件包,你可以使用以下命令来安装:
- 对于基于Debian的系统(如Ubuntu),使用apt-get命令:
[linux@bashcommandnotfound.cn ~]$ sudo apt-get update
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install iptables ncurses-bin
- 对于基于Red Hat的系统(如CentOS),使用yum或dnf命令:
[linux@bashcommandnotfound.cn ~]$ sudo yum update
[linux@bashcommandnotfound.cn ~]$ sudo yum install iptables ncurses
或者
[linux@bashcommandnotfound.cn ~]$ sudo dnf update
[linux@bashcommandnotfound.cn ~]$ sudo dnf install iptables ncurses
- 对于基于Arch的系统(如Manjaro),使用pacman命令:
[linux@bashcommandnotfound.cn ~]$ sudo pacman -Syu
[linux@bashcommandnotfound.cn ~]$ sudo pacman -S iptables ncurses
Linux iptstate命令的基本语法
iptstate命令的基本语法格式如下:
iptstate [options]
其中,options是可选的参数,用来指定显示的信息和格式。如果不指定任何参数,iptstate会显示默认的状态信息,包括源地址、目的地址、协议、状态、TTL等。
Linux iptstate命令的常用选项或参数说明
iptstate命令有很多选项或参数,可以用来控制显示的内容和方式。以下是一些常用的选项或参数:
选项或参数 | 说明 |
---|---|
-h, --help | 显示帮助信息 |
-v, --version | 显示版本信息 |
-1, --once | 只显示一次状态信息,不刷新 |
-t, --top | 显示最活跃的连接,按照字节或包的数量排序 |
-b, --byt | 按照字节的数量排序 |
-p, --pkt | 按照包的数量排序 |
-s, --src | 指定源地址或范围,只显示匹配的连接 |
-d, --dst | 指定目的地址或范围,只显示匹配的连接 |
-P, --proto | 指定协议,只显示匹配的连接 |
-S, --state | 指定状态,只显示匹配的连接 |
-f, --filter | 指定过滤规则,只显示匹配的连接 |
-n, --numeric | 不解析主机名和端口名,只显示数字 |
-r, --reverse | 反转排序顺序 |
-R, --rate | 显示连接的速率,单位为bps或pps |
-T, --timeout | 指定刷新间隔,单位为秒 |
-w, --watch | 指定监视的链,只显示该链的连接 |
-W, --wide | 显示完整的地址和端口,不截断 |
-z, --zero | 清零计数器 |
Linux iptstate命令的实例
以下是一些iptstate命令的实例,可以帮助你更好地理解和使用这个命令。
实例1:显示默认的状态信息
如果不指定任何参数,iptstate会显示默认的状态信息,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
这里可以看到,每一行表示一个连接,包括源地址、目的地址、协议、状态、TTL和过期时间等信息。这些信息会不断地刷新,以反映当前的连接状态。
实例2:显示最活跃的连接
如果想要显示最活跃的连接,可以使用-t或--top选项,这样iptstate会按照字节或包的数量排序,只显示前10个连接,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -t
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.2M
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.1M
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.0M
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 900K
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 800K
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 700K
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 600K
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 500K
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 400K
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 300K
这里可以看到,每一行的最后一列显示了该连接的字节数量,单位为K或M。如果想要按照包的数量排序,可以使用-p或--pkt选项,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -t -p
Source IP Destination IP Proto State TTL Expires
192.168.1.100
...
实例3:指定源地址或目的地址
如果想要只显示某个源地址或目的地址的连接,可以使用-s或--src选项,或者-d或--dst选项,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -s 192.168.1.100
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
或者
[linux@bashcommandnotfound.cn ~]$ iptstate -d 172.217.24.14
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
这里可以看到,只显示了源地址为192.168.1.100或目的地址为172.217.24.14的连接。如果想要指定一个地址范围,可以使用CIDR表示法,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -s 192.168.1.0/24
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
这里可以看到,只显示了源地址为192.168.1.0/24的连接,即192.168.1.0到192.168.1.255的地址。
实例4:指定协议或状态
如果想要只显示某个协议或状态的连接,可以使用-P或--proto选项,或者-S或--state选项,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -P tcp
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
或者
[linux@bashcommandnotfound.cn ~]$ iptstate -S ESTABLISHED
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
这里可以看到,只显示了协议为tcp或状态为ESTABLISHED的连接。如果想要指定多个协议或状态,可以使用逗号分隔,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -P tcp,udp
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29
...
或者
[linux@bashcommandnotfound.cn ~]$ iptstate -S ESTABLISHED,NEW
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29
...
这里可以看到,只显示了协议为tcp或udp,或状态为ESTABLISHED或NEW的连接。
实例5:指定过滤规则
如果想要只显示符合某个过滤规则的连接,可以使用-f或--filter选项,这样iptstate会使用iptables的语法来解析过滤规则,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -f "-s 192.168.1.0/24 -d 172.217.24.14 -p tcp --dport 80"
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
...
这里可以看到,只显示了源地址为192.168.1.0/24,目的地址为172.217.24.14,协议为tcp,目的端口为80的连接。这个过滤规则相当于使用-s,-d,-P和--dport选项的组合,但是更灵活和强大。
实例6:显示连接的速率
如果想要显示连接的速率,可以使用-R或--rate选项,这样iptstate会在每一行的最后一列显示该连接的速率,单位为bps(字节每秒)或pps(包每秒),如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -R
Source IP Destination IP Proto State TTL Expires Rate
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.2M bps
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.1M bps
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29 100K bps
...
或者
[linux@bashcommandnotfound.cn ~]$ iptstate -R -p
Source IP Destination IP Proto State TTL Expires Rate
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 100 pps
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59 90 pps
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29 10 pps
...
这里可以看到,每一行的最后一列显示了该连接的速率,单位为bps或pps。如果想要按照速率排序,可以使用-t或--top选项,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -t -R
Source IP Destination IP Proto State TTL Expires Rate
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.2M bps
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59 1.1M bps
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29 100K bps
...
或者
[linux@bashcommandnotfound.cn ~]$ iptstate -t -R -p
实例7:显示完整的地址和端口
如果想要显示完整的地址和端口,而不是截断的形式,可以使用-W或--wide选项,这样iptstate会显示完整的IPv6地址和端口,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -W
Source IP Destination IP Proto State TTL Expires
2001:db8:0:1::100 2607:f8b0:400a:800::200e tcp ESTABLISHED 64 00:01:59
2001:db8:0:1::101 2607:f8b0:400a:800::200e tcp ESTABLISHED 64 00:01:59
2001:db8:0:1::100 2001:4860:4860::8888 udp NEW 64 00:00:29
...
这里可以看到,每一行显示了完整的IPv6地址和端口,而不是省略号。
实例8:清零计数器
如果想要清零计数器,可以使用-z或--zero选项,这样iptstate会清空所有连接的字节和包的数量,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -z
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29
...
这里可以看到,每一行的最后一列没有显示字节或包的数量,而是空白。这个选项可以用来重新开始计算连接的流量。
实例9:指定刷新间隔
如果想要指定刷新间隔,可以使用-T或--timeout选项,这样iptstate会按照指定的秒数刷新状态信息,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -T 5
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29
...
这里可以看到,iptstate会每隔5秒刷新一次状态信息,而不是默认的1秒。
实例10:指定监视的链
如果想要只显示某个链的连接,可以使用-w或--watch选项,这样iptstate会只显示指定的链的连接,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -w INPUT
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29
...
这里可以看到,只显示了INPUT链的连接,即进入本机的连接。如果想要显示多个链的连接,可以使用逗号分隔,如下所示:
[linux@bashcommandnotfound.cn ~]$ iptstate -w INPUT,OUTPUT
Source IP Destination IP Proto State TTL Expires
192.168.1.100 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.101 172.217.24.14 tcp ESTABLISHED 64 00:01:59
192.168.1.100 8.8.8.8 udp NEW 64 00:00:29
...
这里可以看到,显示了INPUT和OUTPUT链的连接,即进入和出去本机的连接。
Linux iptstate命令的注意事项
使用iptstate命令时,有以下几点需要注意:
- iptstate命令需要root权限或sudo权限才能运行,否则会提示Permission denied错误。
- iptstate命令依赖于iptables的连接跟踪功能,如果iptables没有启用连接跟踪,或者连接跟踪表被清空,iptstate命令会显示No connections错误。
- iptstate命令只能显示当前的连接状态,不能修改或删除连接,如果想要修改或删除连接,需要使用iptables命令。
- iptstate命令只能显示IPv4和IPv6的连接,不能显示其他协议的连接,如ICMP或ARP。
- 如果系统没有安装iptstate命令,会提示bash: iptstate: command not found错误,此时需要安装iptstate软件包。
Linux iptstate命令的相关命令
以下是一些与iptstate命令相关的命令,可以用来查看或修改iptables的配置和状态:
评论区