application using Pyretic
一、 实验环境
Win7,virtualBox,Pyretic.
二、 实验要求
Implement a layer 2 firewall that runs alongside the MAC learning module
on the Pyretic runtime 拓扑结构如下:
三、 实验步骤
1. 初始环境部署
2. Putty远程登录
3. 构建网络拓扑结构
打开6台host的Xterm
查看h1节点
在h1上运行tcpdump
4. 编写防火墙程序并运行
Pyretic_firewall.py
Filewall-policies.csv
运行py文件
5. 测试节点连通情况
h1->h2,h1->h4
由上图可知,h1与h2之间可以通信,但是h1与h4不行,说明防火墙生效。 h2->h5,h2->h4
由上图可知,h2与h4之间可以通信,但是h2与h5不行,说明防火墙生效。 h3->h6,h3->h5
由上图可知,h3与h5之间可以通信,但是h3与h6不行,说明防火墙生效。
其他节点类似,就不一一列举
四、 代码解释
from pyretic.lib.corelib import * from pyretic.lib.std import *
# insert the name of the module and policy you want to import from pyretic.examples.pyretic_switch import act_like_switch import os import csv #读CSV文件的类
from csv import DictReader #CSV文件地址
policy_file = \"%s/pyretic/pyretic/examples/firewall-policies.csv\" % os.environ[ 'HOME' ]
def main(): # 读入CSV文件
reader = csv.DictReader(file(policy_file,'rb'))
# start with a policy that doesn't match any packets
not_allowed = none
# and add traffic that isn't allowed
#对于CSV中规定的MAC地址为mac_0和mac_1的host相互不能进行访问 for i in reader:
not_allowed = not_allowed +
(match(srcmac=MAC(i['mac_0']))&match(dstmac=MAC(i['mac_1'])))+
(match(srcmac=MAC(i['mac_1']))&match(dstmac=MAC(i['mac_0'])))
# express allowed traffic in terms of not_allowed - hint use '~' allowed = ~ not_allowed
# and only send allowed traffic to the mac learning (act_like_switch) logic return allowed >> act_like_switch()
五、 实验总结
由于对python不熟悉,导致出现一些语法错误,如读取CSV文件以及
pyretic中policy的编写;
加深了对如何部署网络拓扑结构的了解,以及诸如Xming和putty等工
具的使用;
通过软件调用实现了防火墙的功能,为以后灵活地部署防火墙提供了极
大的便利。
因篇幅问题不能全部显示,请点此查看更多更全内容