我正在查看lsof -i的输出,并且感到困惑!例如,我的Java进程与数据库之间的以下连接显示为IPv6:
[me ~] % lsof -P -n -i :2315 -a -p xxxx
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java xxxx me 93u IPv6 2499087197 0t0 TCP 192.168.0.1:16712->192.168.0.2:2315 (ESTABLISHED)
因此,输出类型为IPv6,但在NAME列中清楚地显示了IPv4地址。此外,该连接配置了一个IPv4地址!(在此示例中,192.168.0.2)
非常感谢您的见解!
在Linux中,IPv6套接字可以同时是IPv4和IPv6。IPv6套接字还可以接受来自映射了IPv4的IPv6地址的数据包。
此功能由IPV6_V6ONLY
套接字选项控制,套接字选项的默认值由net.ipv6.bindv6only
sysctl(/proc/sys/net/ipv6/bindv6only
)控制。在大多数Linux发行版中,其默认值为0(即关闭)。
这很容易复制:
[prompt] nc -6 -l 9999 & nc -4 localhost 9999 &
[4] 10892
[5] 10893
[prompt] lsof -P -n -i :9999
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 10892 x 3u IPv6 297229 0t0 TCP *:9999 (LISTEN)
nc 10892 x 4u IPv6 297230 0t0 TCP 127.0.0.1:9999->127.0.0.1:41472 (ESTABLISHED)
nc 10893 x 3u IPv4 296209 0t0 TCP 127.0.0.1:41472->127.0.0.1:9999 (ESTABLISHED)
[prompt] kill %4 %5
客户端套接字为IPv4,服务器套接字为IPv6,并且它们已连接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句