我经常使用 来查看侦听套接字ss -nlptu
,此列表通常包括绑定在 ipv4 或 ipv6 环回地址上的几个/十几个套接字。我们知道有一些有效的 ipv4 环回地址可以绑定,所以如果可以避免的话,我宁愿不使用 grep 之类的东西来排除最常见的地址。
有没有办法ss
从其列表中排除本地/环回侦听端口?
答案1
ss
有一个内置的过滤器语言,可惜它在手册页中几乎没有记录。本文档的最后剩余部分位于ip路由2版本 v4.13.0 并通过此提交删除:
doc:删除过时的 ss 文档
当前版本在手册页上有详细记录。 Latex 文档非常旧并且从未更新过。
ss.sgml
编译/分发后,该文件可能会以其他格式出现。
这是一个例子:
<item>A. Address/port match, where address is checked against mask and port is either wildcard or exact. It is one of: <tscreen><verb> dst prefix:port src prefix:port src unix:STRING src link:protocol:ifindex src nl:channel:pid </verb></tscreen> Both prefix and port may be absent or replaced with <tt/*/, which means wildcard. UNIX socket use more powerful scheme matching to socket names by shell wildcards. Also, prefixes unix: and link: may be omitted, if address family is evident from context (with option <tt/-x/ or with <tt/-f unix/ or with <tt/unix/ keyword) <p>
因此,如果您想排除任何环回地址,您可以执行以下操作:
ss -nlptu '! src 127.0.0.0/8 and ! src [::1]'
实际上需要引号只是因为 IPv6 地址格式,但一旦使用引号,最好将所有内容都加上引号。