如何验证服务正在侦听 ipv4 和 ipv6?

如何验证服务正在侦听 ipv4 和 ipv6?

我想检查 https 服务是否同时监听 IPv6 和 IPv4。

而且当我通过浏览器访问 url 时,我想知道请求是由 IPv4 还是 IPv6 提供服务。

答案1

您可以使用netstat

# netstat -tlnp | grep httpd
# netstat -tlnp | grep apache
# netstat -tlnp | grep nginx
# netstat -tlnp | grep ...

然后检查是否获得每个 IP 协议版本(tcp 和 tcp6)的一行。

#!/bin/bash

ns=$(netstat -tlnp | grep httpd)

if grep 'tcp ' <<< "$ns" >/dev/null; then
    echo "httpd has a listening IPv4 socket."
fi

if grep 'tcp6 ' <<< "$ns" >/dev/null; then
    echo "httpd has a listening IPv6 socket."
fi

netstat请注意,如果您想查看属于 root 的进程(例如 Apache 主进程),则需要 root 权限。如果您想netstat作为标准用户使用,请删除该-p选项并grep改为通过 IP 和端口。例如:

$ netstat -tln | grep '0.0.0.0:80'
$ netstat -tln | grep '127.0.0.1:80'
$ netstat -tln | grep '::1:80'

请注意,在这种情况下,您不需要grep再次打开tcptcp6,因为您正在查找的 IPgrep已经提供了您要查找的信息。您应该查找 127.0.0.1 还是 0.0.0.0 取决于您的 Web 服务器配置。

答案2

lsof也很有用。

可以看到nginx分别使用IPv4和IPv6的所有监听地址和已建立的连接,如下(以root身份运行):

lsof -c nginx -a -i4
lsof -c nginx -a -i6

显示客户端主机上 Google Chrome 的所有连接,包括 v4 和 v6:

lsof -c chrome -a -i

相关内容