30 lines
948 B
Python
Executable File
30 lines
948 B
Python
Executable File
#!/usr/bin/python
|
|
|
|
import sys, os
|
|
import socket, binascii
|
|
|
|
if len(sys.argv) < 3:
|
|
print "Usage: udp.py <group> <port> <listen address>"
|
|
exit(0)
|
|
mcast_grp = sys.argv[1]
|
|
mcast_port = int(sys.argv[2])
|
|
listen_addr = len(sys.argv) == 4 and sys.argv[3] or '0.0.0.0'
|
|
|
|
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
|
|
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
|
|
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 32)
|
|
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1)
|
|
sock.bind((mcast_grp, mcast_port))
|
|
|
|
host = listen_addr
|
|
sock.setsockopt(socket.SOL_IP, socket.IP_MULTICAST_IF, socket.inet_aton(host))
|
|
sock.setsockopt(socket.SOL_IP, socket.IP_ADD_MEMBERSHIP, socket.inet_aton(mcast_grp) + socket.inet_aton(host))
|
|
|
|
while 1:
|
|
try:
|
|
data, addr = sock.recvfrom(1024)
|
|
except socket.error, e:
|
|
print "error", e
|
|
hexdata = binascii.hexlify(data)
|
|
print 'Data = %s' % hexdata
|