如何向虚拟 IPV6 地址发送消息?
How to send messages to virtual IPV6 Address?
我想从 Windows/Linux 发送一条消息到我在 Ubuntu 上创建的 IPV6 虚拟 IP 地址。谁能建议这样做的过程?
我通过以下代码在 Ubuntu 中创建了虚拟 IPV6:
sudo ip -6 addr add 2002:1:1:1::10/64 dev eth0
并且,为了向 IPV6 发送消息,我使用了这个 Pyhton 代码:
对于客户:
# Echo client program
import socket
import sys
HOST = '2002:1:1:1::10' # The remote host
PORT = 50007 # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
s = socket.socket(af, socktype, proto)
except OSError as msg:
s = None
continue
try:
s.connect(sa)
except OSError as msg:
s.close()
s = None
continue
break
if s is None:
print('could not open socket')
sys.exit(1)
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))
对于服务器:
# Echo server program
import socket
import sys
HOST = '2002:1:1:1::10' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
af, socktype, proto, canonname, sa = res
# The AF_* and SOCK_* constants are now AddressFamily and SocketKind IntEnum collections.
try:
s = socket.socket(af, socktype, proto)
except OSError as msg:
s = None
continue
try:
s.bind(sa)
s.listen(1)
except OSError as msg:
s.close()
s = None
continue
break
if s is None:
print('could not open socket')
sys.exit(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
print(data)
if not data: break
conn.send(data)
conn.close()
当我 运行 这个程序时,我收到这个错误:[Errno 101] 网络无法访问。而且,我无法ping通虚拟IPV6。
以2002:
开头的IPv6地址是6to4地址。关于如何使用和路由它们有特殊规则。您使用的地址链接到 IPv4 地址 0.1.0.1
,这不是有效的 IPv4 地址,因此您的 IPv6 地址也无效。
使用 IPv6 时,您应该使用 ISP 提供的官方地址。如果您无法从您的 ISP 处获得地址并且希望地址仅供本地使用,那么请使用 ULA 地址。您可以自己生成这些。有多个网站有您可以使用的在线生成器。
我想从 Windows/Linux 发送一条消息到我在 Ubuntu 上创建的 IPV6 虚拟 IP 地址。谁能建议这样做的过程?
我通过以下代码在 Ubuntu 中创建了虚拟 IPV6: sudo ip -6 addr add 2002:1:1:1::10/64 dev eth0
并且,为了向 IPV6 发送消息,我使用了这个 Pyhton 代码:
对于客户:
# Echo client program
import socket
import sys
HOST = '2002:1:1:1::10' # The remote host
PORT = 50007 # The same port as used by the server
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM):
af, socktype, proto, canonname, sa = res
try:
s = socket.socket(af, socktype, proto)
except OSError as msg:
s = None
continue
try:
s.connect(sa)
except OSError as msg:
s.close()
s = None
continue
break
if s is None:
print('could not open socket')
sys.exit(1)
s.sendall(b'Hello, world')
data = s.recv(1024)
s.close()
print('Received', repr(data))
对于服务器:
# Echo server program
import socket
import sys
HOST = '2002:1:1:1::10' # Symbolic name meaning all available interfaces
PORT = 50007 # Arbitrary non-privileged port
s = None
for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC,socket.SOCK_STREAM, 0, socket.AI_PASSIVE):
af, socktype, proto, canonname, sa = res
# The AF_* and SOCK_* constants are now AddressFamily and SocketKind IntEnum collections.
try:
s = socket.socket(af, socktype, proto)
except OSError as msg:
s = None
continue
try:
s.bind(sa)
s.listen(1)
except OSError as msg:
s.close()
s = None
continue
break
if s is None:
print('could not open socket')
sys.exit(1)
conn, addr = s.accept()
print('Connected by', addr)
while True:
data = conn.recv(1024)
print(data)
if not data: break
conn.send(data)
conn.close()
当我 运行 这个程序时,我收到这个错误:[Errno 101] 网络无法访问。而且,我无法ping通虚拟IPV6。
以2002:
开头的IPv6地址是6to4地址。关于如何使用和路由它们有特殊规则。您使用的地址链接到 IPv4 地址 0.1.0.1
,这不是有效的 IPv4 地址,因此您的 IPv6 地址也无效。
使用 IPv6 时,您应该使用 ISP 提供的官方地址。如果您无法从您的 ISP 处获得地址并且希望地址仅供本地使用,那么请使用 ULA 地址。您可以自己生成这些。有多个网站有您可以使用的在线生成器。