#!/usr/bin/env python3"""Send/receive UDP multicast packets.Requires that your OS kernel supports IP multicast.Usage:mcast -s (sender, IPv4)mcast -s -6 (sender, IPv6)mcast (receivers, IPv4)mcast -6 (receivers, IPv6)"""MYPORT = 8123MYGROUP_4 = '225.0.0.250'MYGROUP_6 = 'ff15:7079:7468:6f6e:6465:6d6f:6d63:6173'MYTTL = 1 # Increase to reach other networksimport timeimport structimport socketimport sysdef main():group = MYGROUP_6 if "-6" in sys.argv[1:] else MYGROUP_4if "-s" in sys.argv[1:]:sender(group)else:receiver(group)def sender(group):addrinfo = socket.getaddrinfo(group, None)[0]s = socket.socket(addrinfo[0], socket.SOCK_DGRAM)# Set Time-to-live (optional)ttl_bin = struct.pack('@i', MYTTL)if addrinfo[0] == socket.AF_INET: # IPv4s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, ttl_bin)else:s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, ttl_bin)while True:data = repr(time.time()).encode('utf-8') + b'0円's.sendto(data, (addrinfo[4][0], MYPORT))time.sleep(1)def receiver(group):# Look up multicast group address in name server and find out IP versionaddrinfo = socket.getaddrinfo(group, None)[0]# Create a sockets = socket.socket(addrinfo[0], socket.SOCK_DGRAM)# Allow multiple copies of this program on one machine# (not strictly needed)s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)# Bind it to the ports.bind(('', MYPORT))group_bin = socket.inet_pton(addrinfo[0], addrinfo[4][0])# Join groupif addrinfo[0] == socket.AF_INET: # IPv4mreq = group_bin + struct.pack('=I', socket.INADDR_ANY)s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)else:mreq = group_bin + struct.pack('@I', 0)s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq)# Loop, printing any data we receivewhile True:data, sender = s.recvfrom(1500)while data[-1:] == '0円': data = data[:-1] # Strip trailing 0円'sprint(str(sender) + ' ' + repr(data))if __name__ == '__main__':main()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。