Guest User

Untitled

a guest
Nov 19th, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. import argparse
  5. import socket
  6. import struct
  7. import time
  8.  
  9. MCAST_PORT = 9999
  10. MCAST_GROUP = '225.0.0.250'
  11. MCAST_TTL = 1
  12. MCAST_IF = None
  13.  
  14.  
  15. def main():
  16. parser = argparse.ArgumentParser()
  17.  
  18. parser.add_argument('-s', '--send', action='store_true', default=False)
  19. parser.add_argument('-p', '--port', type=int, default=MCAST_PORT)
  20. parser.add_argument('-g', '--group', type=str, default=MCAST_GROUP)
  21. parser.add_argument('-t', '--ttl', type=int, default=MCAST_TTL)
  22. parser.add_argument('-i', '--interface', type=str, default=MCAST_IF)
  23.  
  24. args = parser.parse_args()
  25. if args.send:
  26. sender(args)
  27. else:
  28. receiver(args)
  29.  
  30.  
  31. def sender(args):
  32. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  33.  
  34. if args.interface is None:
  35. s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL,
  36. struct.pack('@i', args.ttl))
  37. else:
  38. s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF,
  39. socket.inet_pton(socket.AF_INET, args.interface))
  40.  
  41. while True:
  42. data = repr(time.time())
  43. s.sendto(data + '\0', (args.group, args.port))
  44. time.sleep(1)
  45.  
  46.  
  47. def receiver(args):
  48. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  49. s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  50. s.bind(('', args.port))
  51.  
  52. b = socket.inet_pton(socket.AF_INET, args.group)
  53. if args.interface is None:
  54. mreq = b + struct.pack('=I', socket.INADDR_ANY)
  55. else:
  56. mreq = b + socket.inet_pton(socket.AF_INET, args.interface)
  57. s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)
  58.  
  59. while True:
  60. data, sender = s.recvfrom(1500)
  61. while data[-1:] == '\0':
  62. data = data[:-1]
  63. print ('from:' + str(sender[0]) +
  64. ', port:' + str(sender[1]) +
  65. ', data:' + repr(data))
  66.  
  67.  
  68. if __name__ == '__main__':
  69. main()
Add Comment
Please, Sign In to add comment