本文整理汇总了Python中socket.IPV6_MULTICAST_IF属性的典型用法代码示例。如果您正苦于以下问题:Python socket.IPV6_MULTICAST_IF属性的具体用法?Python socket.IPV6_MULTICAST_IF怎么用?Python socket.IPV6_MULTICAST_IF使用的例子?那么, 这里精选的属性代码示例或许可以为您提供帮助。您也可以进一步了解该属性所在类socket
的用法示例。
在下文中一共展示了socket.IPV6_MULTICAST_IF属性的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: _create_ipv6_sockets
# 需要导入模块: import socket [as 别名]
# 或者: from socket import IPV6_MULTICAST_IF [as 别名]
def _create_ipv6_sockets(loopback_enabled):
# Open a multicast send socket, with IP_MULTICAST_LOOP enabled or disabled as requested.
intf_name = find_ethernet_interface()
intf_index = socket.if_nametoindex(intf_name)
mcast_address = "ff02::abcd:99"
port = 30000
group = (mcast_address, port)
txsock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
txsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
txsock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, intf_index)
if loopback_enabled:
txsock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_LOOP, 1)
else:
txsock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_LOOP, 0)
txsock.connect(group)
# Open a multicast receive socket and join the group
rxsock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
req = struct.pack("=16si", socket.inet_pton(socket.AF_INET6, mcast_address), intf_index)
if platform.system() == "Darwin":
rxsock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, req)
else:
rxsock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_ADD_MEMBERSHIP, req)
rxsock.bind(("::", port))
return (txsock, rxsock)
示例2: create_socket_ipv6_tx_mcast
# 需要导入模块: import socket [as 别名]
# 或者: from socket import IPV6_MULTICAST_IF [as 别名]
def create_socket_ipv6_tx_mcast(self, multicast_address, port, loopback):
if self._interface_index is None:
self.warning("Could not create IPv6 multicast TX socket: unknown interface index")
return None
try:
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
except IOError as err:
self.warning("Could not create IPv6 UDP socket: %s", err)
return None
self.enable_addr_and_port_reuse(sock)
try:
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, self._interface_index)
except IOError as err:
self.warning("Could not set IPv6 multicast interface index %d: %s",
self._interface_index, err)
return None
try:
loop_value = 1 if loopback else 0
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_LOOP, loop_value)
except IOError as err:
self.warning("Could not set IPv6 multicast loopback value %d: %s", loop_value, err)
return None
try:
scoped_ipv6_multicast_address = (
str(multicast_address) + '%' + self.physical_interface_name)
sock_addr = socket.getaddrinfo(scoped_ipv6_multicast_address, port,
socket.AF_INET6, socket.SOCK_DGRAM)[0][4]
sock.connect(sock_addr)
except (IOError, OSError) as err:
self.warning("Could not connect UDP socket to address %s port %d: %s",
scoped_ipv6_multicast_address, port, err)
return None
return sock
示例3: ipv6Multicast
# 需要导入模块: import socket [as 别名]
# 或者: from socket import IPV6_MULTICAST_IF [as 别名]
def ipv6Multicast(host='::1', maddr=maddr):
haddr = socket.getaddrinfo(host, maddr[1], socket.AF_INET6, socket.SOCK_DGRAM)[0][-1]
maddr = socket.getaddrinfo(maddr[0], maddr[1], socket.AF_INET6, socket.SOCK_DGRAM)[0][-1]
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
if hasattr(socket, "SO_REUSEPORT"):
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEPORT, 1)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_LOOP, 1)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, 5)
ifn = haddr[3] or if_nametoindex('lo0')
ifn = struct.pack("I", ifn)
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, ifn)
group = socket.inet_pton(socket.AF_INET6, maddr[0]) + ifn
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, group)
sock.bind(haddr)
sock.setblocking(False)
return sock, maddr
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#~ Main
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
示例4: __discover_device__
# 需要导入模块: import socket [as 别名]
# 或者: from socket import IPV6_MULTICAST_IF [as 别名]
def __discover_device__(self):
if TOBII_DISCOVERY_ALLOWED == False:
logging.error("Device discovery is not available due to a missing dependency (netifaces)")
exit(1)
logging.debug("Looking for a Tobii Pro Glasses 2 device ...")
MULTICAST_ADDR = 'ff02::1'
PORT = 13006
for i in netifaces.interfaces():
if netifaces.AF_INET6 in netifaces.ifaddresses(i).keys():
if "%" in netifaces.ifaddresses(i)[netifaces.AF_INET6][0]['addr']:
if_name = netifaces.ifaddresses(i)[netifaces.AF_INET6][0]['addr'].split("%")[1]
if_idx = socket.getaddrinfo(MULTICAST_ADDR + "%" + if_name, PORT, socket.AF_INET6, socket.SOCK_DGRAM)[0][4][3]
s6 = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
s6.settimeout(30.0)
s6.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, if_idx)
s6.bind(('::', PORT))
PORT_OUT = PORT if sys.platform == 'win32' or sys.platform == 'darwin' else PORT + 1
try:
discover_json = '{"type":"discover"}'
s6.sendto(discover_json.encode('utf-8'), (MULTICAST_ADDR, PORT_OUT))
logging.debug("Discover request sent to %s on interface %s " % ( str((MULTICAST_ADDR, PORT_OUT)),if_name) )
logging.debug("Waiting for a reponse from the device ...")
data, address = s6.recvfrom(1024)
jdata = json.loads(data.decode('utf-8'))
logging.debug("From: " + address[0] + " " + str(data))
logging.debug("Tobii Pro Glasses found with address: [%s]" % address[0])
addr = address[0]
if sys.version_info.major == 3 and sys.version_info.minor >= 8:
addr = address[0] + '%' + if_name
return (jdata, addr)
except:
logging.debug("No device found on interface %s" % if_name)
logging.debug("The discovery process did not find any device!")
return (None, None)
示例5: init_v6
# 需要导入模块: import socket [as 别名]
# 或者: from socket import IPV6_MULTICAST_IF [as 别名]
def init_v6(self):
idx = socket.if_nametoindex(self.interface.name)
self.multicast_address = (WSD_MCAST_GRP_V6, WSD_UDP_PORT, 0x575C, idx)
# v6: member_request = { multicast_addr, intf_idx }
mreq = (
socket.inet_pton(self.family, WSD_MCAST_GRP_V6) +
struct.pack('@I', idx))
self.recv_socket.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)
self.recv_socket.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_V6ONLY, 1)
# bind to network interface, i.e. scope and handle OS differences,
# see Stevens: Unix Network Programming, Section 21.6, last paragraph
try:
self.recv_socket.bind((WSD_MCAST_GRP_V6, WSD_UDP_PORT, 0, idx))
except OSError:
self.recv_socket.bind(('::', 0, 0, idx))
self.send_socket.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_LOOP, 0)
self.send_socket.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, args.hoplimit)
self.send_socket.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, idx)
self.transport_address = '[{0}]'.format(self.address)
self.listen_address = (self.address, WSD_HTTP_PORT, 0, idx)
示例6: set_ipv6_multicast_source_ifindex
# 需要导入模块: import socket [as 别名]
# 或者: from socket import IPV6_MULTICAST_IF [as 别名]
def set_ipv6_multicast_source_ifindex(sock, ifindex):
"""Sets the given socket up to send multicast from the specified source.
Ensures the multicast hop limit is set to 1, so that packets are not
forwarded beyond the local link.
:param sock: An opened IP socket.
:param ifindex: An integer representing the interface index.
"""
sock.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, 1)
packed_ifindex = struct.pack("I", ifindex)
sock.setsockopt(
socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, packed_ifindex
)