[tv] Un recup_sap en python pour remplacer le binaire recup_sap
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.
This commit is contained in:
parent
2dfcc35dfe
commit
37c77d88d0
1 changed files with 48 additions and 0 deletions
48
tv/recup_sap.py
Executable file
48
tv/recup_sap.py
Executable file
|
@ -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)
|
Loading…
Add table
Add a link
Reference in a new issue