试着搭建了一个实验环境:GNS3作为组播传输网络,Python socket编程实现组播服务器和客户端应用。
拓扑如下:
Python_Multicast_Server:
#!/usr/bin/env python
SENDERIP = '192.168.1.10'
SENDERPORT = 1501
MYPORT = 1234
MYGROUP = '224.1.1.1'
MYTTL = 255 # Increase to reach other networks
import time
import struct
import socket
def sender():
s =
socket.socket(socket.AF_INET,
socket.SOCK_DGRAM,socket.IPPROTO_UDP)
s.bind((SENDERIP,SENDERPORT))
# Set
Time-to-live (optional)
ttl_bin =
struct.pack('@i', MYTTL)
s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL,
ttl_bin)
status =
s.setsockopt(socket.IPPROTO_IP,
socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MYGROUP) + socket.inet_aton(SENDERIP))
while
True:
data = 'cisco'
s.sendto(data + '\0', (MYGROUP, MYPORT))
time.sleep(10)
if __name__ == "__main__":
sender()
每隔10秒往组播地址224.1.1.1发送cisco字符串。
组播拓扑配置了IGP和PIM DM
Python_Multicast_Receiver:
SENDERIP = '192.168.247.1'
MYPORT = 1234
MYGROUP = '224.1.1.1'
MYTTL = 1 # Increase to reach other networks
import time
import struct
import socket
SENDERIP = '192.168.247.1'
SENDERPORT = 1501
MYPORT = 1234
MYGROUP = '224.1.1.1'
MYTTL = 1 # Increase to reach other networks
def receiver():
#create a
UDP socket
sock =
socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
socket.IPPROTO_UDP)
#allow
multiple sockets to use the same PORT number
sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
#Bind to the
port that we know will receive multicast data
sock.bind((SENDERIP,MYPORT))
#tell the
kernel that we are a multicast socket
sock.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL,
255)
#Tell the
kernel that we want to add ourselves to a multicast group
#The address
for the multicast group is the third param
status =
sock.setsockopt(socket.IPPROTO_IP,
socket.IP_ADD_MEMBERSHIP,
socket.inet_aton(MYGROUP) + socket.inet_aton(SENDERIP));
sock.setblocking(0)
ts =
time.time()
while
1:
try:
data, addr = sock.recvfrom(1024)
except socket.error, e:
pass
else:
print "Receive data!"
print "TIME:" , ts
print "FROM: ", addr
print "DATA: ", data
if __name__ == "__main__":
receiver()
成功收到:后面可以开始分析IGMP,PIM啦