Ich sehe mir die Ausgabe von lsof -i an und bin verwirrt! Beispielsweise wird die folgende Verbindung zwischen meinem Java-Prozess und der Datenbank als IPv6 angezeigt:
[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)
Der Ausgabetyp ist also IPv6, aber in der Spalte NAME wird eindeutig eine IPv4-Adresse angezeigt. Darüber hinaus wurde die Verbindung mit einer IPv4-Adresse konfiguriert! (In diesem Beispiel 192.168.0.2)
Vielen Dank für alle Einblicke!
Antwort1
Unter Linux können IPv6-Sockets gleichzeitig IPv4 und IPv6 sein. Ein IPv6-Socket kann auch Pakete von einemIPv4-zugeordnete IPv6-Adresse.
Diese Funktion wird durch die Socket-Option gesteuert , deren Standardwert durch sysctl ( ) IPV6_V6ONLY
gesteuert wird . Bei den meisten Linux-Distributionen ist der Standardwert 0 (d. h. deaktiviert).net.ipv6.bindv6only
/proc/sys/net/ipv6/bindv6only
Dies kann leicht reproduziert werden mit:
[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
Der Client-Socket ist IPv4 und der Server-Socket ist IPv6, und sie sind verbunden.