您的当前位置:首页正文

中科大高级计算机网络实验三

2023-09-03 来源:步旅网
Create a fully functional layer-2 Firewall

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等工

具的使用;

 通过软件调用实现了防火墙的功能,为以后灵活地部署防火墙提供了极

大的便利。

因篇幅问题不能全部显示,请点此查看更多更全内容