From 37c77d88d0e5d5ac5a2c02723d0b557ca5e0659c Mon Sep 17 00:00:00 2001 From: Valentin Samir Date: Thu, 5 Sep 2013 10:05:10 +0200 Subject: [PATCH] [tv] Un recup_sap en python pour remplacer le binaire recup_sap MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On en profite pour mettre le résultat dans /usr/script/var/tv/ à la fois une version textuelle (similaire au fichier anciennement produit par le binaire recup_sap) et un pickle d'un dictionnaire python. --- tv/recup_sap.py | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100755 tv/recup_sap.py diff --git a/tv/recup_sap.py b/tv/recup_sap.py new file mode 100755 index 00000000..4a489ac1 --- /dev/null +++ b/tv/recup_sap.py @@ -0,0 +1,48 @@ +#!/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={} + +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) + if tag=='s': + s=value + if tag=='c': + ip=value.split(' ')[2].split('/')[0] + service[s]=ip + print "%s: %s" % (s, ip) + if time.time() - start > timeout: + break + +f=open(path, 'w') +l=service.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)