python环境配置实验步骤_IP Multicast: GNS3 + Python 实验环境搭建

试着搭建了一个实验环境:GNS3作为组播传输网络,Python socket编程实现组播服务器和客户端应用。

拓扑如下:

sg_trans.gif

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字符串。

sg_trans.gif

组播拓扑配置了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啦

sg_trans.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值