scripts/tv/recup_sap.py
2013-09-05 20:05:10 +02:00

56 lines
1.3 KiB
Python
Executable file

#!/usr/bin/env python
import socket
import struct
import time
import pickle
import os
MCAST_GRP = '224.2.127.254' # sap.mcast.net
MCAST_PORT = 9875
timeout=60
path='/usr/scripts/var/tv/sap.txt'
pickeled_path='/usr/scripts/var/tv/sap.pickel'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)
sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
service={}
service_simple={}
start=time.time()
while True:
msg=sock.recv(10240).split('\r\n')
# print msg
s=None
ip=None
for line in msg[:-1]:
(tag, value) = line.split('=', 1)
print (tag, value)
if tag=='s':
s=value
if tag=='c':
ip=value.split(' ')[2].split('/')[0]
if tag=='a' and value.startswith('x-plgroup:'):
group=value[10:]
service_simple[s]=ip
try:
service[group][s]=ip
except KeyError:
service[group]={s:ip}
# print "%s: %s" % (s, ip)
if time.time() - start > timeout:
break
f=open(path, 'w')
l=service_simple.items()
l.sort()
for (name, ip) in l:
f.write("%s:%s\n" % (name, ip))
f.close()
pickle.dump(service, open(pickeled_path + '.tmp', 'w'))
os.rename(pickeled_path + '.tmp', pickeled_path)