From: Pavel Shramov Date: Sun, 9 Dec 2007 10:51:28 +0000 (+0100) Subject: contrib/network-proxy.py: Added a simply (unicast) proxy for collectd traffic. X-Git-Tag: collectd-4.3.0beta0~70^2 X-Git-Url: https://git.verplant.org/?a=commitdiff_plain;h=501142a3e19dbd5e30684d075ae3db87f5bfef82;p=collectd.git contrib/network-proxy.py: Added a simply (unicast) proxy for collectd traffic. --- diff --git a/contrib/network-proxy.py b/contrib/network-proxy.py new file mode 100644 index 00000000..98a4ad8b --- /dev/null +++ b/contrib/network-proxy.py @@ -0,0 +1,46 @@ +#!/usr/bin/env python +# vim: sts=4 sw=4 et + +# Simple unicast proxy to send collectd traffic to another host/port. +# Copyright (C) 2007 Pavel Shramov +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the Free +# Software Foundation; only version 2 of the License is applicable. +# +# This program is distributed in the hope that it will be useful, but WITHOUT +# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +# more details. +# +# You should have received a copy of the GNU General Public License along with +# this program; if not, write to the Free Software Foundation, Inc., 59 Temple +# Place, Suite 330, Boston, MA 02111-1307 USA + +""" +Simple unicast proxy for collectd (>= 4.0). +Binds to 'local' address and forwards all traffic to 'remote'. +""" + +import socket +import struct + +""" Local multicast group/port""" +local = ("239.192.74.66", 25826) +""" Address to send packets """ +remote = ("grid.pp.ru", 35826) + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) +mreq = struct.pack("4sl", socket.inet_aton(local[0]), socket.INADDR_ANY) + +sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) +sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_LOOP, 1) +sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) +sock.bind(local) + +out = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + +if __name__ == "__main__": + while True: + (buf, addr) = sock.recvfrom(2048) + sock.sendto(buf, remote)