python实现多播数据的发送和接收

摘要:
在项目中,YS私有协议用到多播技术,在验证其安全特性时用到python去发送多播包,在此做个记录。

在项目中,YS私有协议用到多播技术,在验证其安全特性时用到python去发送多播包,在此做个记录。

多播服务器用于向多播组发送多播数据包,其实现代码如下:

#coding:utf-8,
import socket 
import time

ANY = '0.0.0.0'SENDERPORT=1501MCAST_ADDR = '224.168.2.9'MCAST_PORT = 1600
sock =socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) 
sock.bind((ANY,SENDERPORT)) #绑定发送端口到SENDERPORT,即此例的发送端口为1501
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) #设置使用多播发送
while 1: 
    time.sleep(10)
    sock.sendto('Hello World', (MCAST_ADDR,MCAST_PORT) ); #将'hello world'发送到多播地址的指定端口,属于这个多播组的成员都可以收到这个信息

通过wireshark捕抓到的数据包如下:

image

多播客户端用于接收多播服务器发送的多播包,其代码如下:

#coding:utf-8,
import socket 
import time

ANY = '0.0.0.0'MCAST_ADDR = '224.168.2.9'MCAST_PORT = 1600
sock =socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) #创建UDP socket
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) #允许端口复用 
sock.bind((ANY,MCAST_PORT)) #绑定监听多播数据包的端口
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 255) #告诉内核这是一个多播类型的socket
status =sock.setsockopt(socket.IPPROTO_IP,  #告诉内核把自己加入指定的多播组,组地址由第三个参数指定
socket.IP_ADD_MEMBERSHIP, 
socket.inet_aton(MCAST_ADDR) +socket.inet_aton(ANY));

sock.setblocking(0) 
ts =time.time() 
while 1: 
    try: 
        data, addr = sock.recvfrom(1024) 
    except socket.error, e: 
        pass 
    else: 
        print "We got data!"print "FROM: ", addr 
        print "DATA: ", data

image

多播客户端代码的关键是通过(socket.IP_ADD_MEMBERSHIP)把自己加入多播组以及监听在多播服务器指定的多播端口(MCAST_PORT),此外,多播服务器的目标地址必须是一个有效的多播地址,而不能是单播地址,比如:(localhost / INADDR_ANY / any valid IP)。

免责声明:文章转载自《python实现多播数据的发送和接收》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇PostgreSQL全文检索zhparser使用centos7 开机自动连网下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java Socket用法详解(转)

在客户/服务器通信模式中, 客户端需要主动创建与服务器连接的 Socket(套接字), 服务器端收到了客户端的连接请求, 也会创建与客户连接的 Socket. Socket可看做是通信连接两端的收发器, 服务器与客户端都通过 Socket 来收发数据. 这篇文章首先介绍Socket类的各个构造方法, 以及成员方法的用法, 接着介绍 Socket的一些选项的...

Python连接oracle数据库

step1:下载cx_Oracle模块,cmd--pip install cx_Oracle step2: 1 import cx_Oracle #引用模块cx_Oracle 2 conn=cx_Oracle.connect('truck/******@10.7...

Python爬取上交所一年大盘数据

前言 文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 作者: 半个码农2018 PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 http://note.youdao.com/noteshare?id=3054cce4add8a909e784ad934f956cef...

Unix套接字接口

简介 套接字是操作系统中用于网络通信的重要结构,它是建立在网络体系结构的传输层,用于主机之间数据的发送和接收,像web中使用的http协议便是建立在socket之上的。这一节主要讨论网络套接字。 套接字接口时一组函数,它们和Unix I/O结合起来,用于创建网络应用。许多操作系统都实现了自己的套接字接口。在Unix中,可以将套接字视为一个文件,使用文件I/...

python中使用multipart/form-data请求上传文件

最近测试的接口是上传文件的接口,上传单个文件,我主要使用了2种方法~ 接口例如: URL: http://www.baidu.com/*** method:post 参数: {"salary":19,"file":{}} 1、使用Python的requests上传表单数据和文件 data={"salary":salary} files={'file...

Python编程-一个小爬虫工具的实现过程

需求描述: 1,打开网站; 2,获取网站的文件内容; 3,返回保存到文件中; 这里的就用到了多线程的方法 import requests,threading,timedef write_html(url,name): r = requests.get(url) with open(name,'w',encoding='utf-8') as...