jac*_*ack 8 python sockets ip ipv6
我以前使用下面的代码将IPv4地址绑定到Python套接字作为源IP地址.
import socket
true_socket = socket.socket
def bound_socket(*a, **k):
sock = true_socket(*a, **k)
sock.bind((sourceIP, 0))
return sock
socket.socket = bound_socket
Run Code Online (Sandbox Code Playgroud)
上面的代码是否适用于IPv6地址?如果没有,我如何绑定IPv6地址?
提前致谢!
你可以尝试这个,获得一个IPV6地址,建议你使用socket.getaddrinfo
它将返回所有不同的地址IPV4和IPV6,你可以绑定它们或只是你想要/需要的地方.
import socket
def bound_socket(*a, **k):
sock = socket.socket(*a, **k)
if socket.AF_INET6 in a:
if not socket.has_ipv6:
raise ValueError("There's no support for IPV6!")
else:
address = [addr for addr in socket.getaddrinfo(source_ip, None)
if socket.AF_INET6 == addr[0]] # You ussually want the first one.
if not address:
raise ValueError("Couldn't find ipv6 address for source %s" % source_ip)
sock.bind(address[0][-1])
else:
sock.bind((source_ip, 0))
return sock
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
6379 次 |
最近记录: |