美文网首页
2024-06-23sdn

2024-06-23sdn

作者: 禁欲系泰迪 | 来源:发表于2024-06-22 17:14 被阅读0次

    #!/usr/bin/python

    # CS 6250 Spring 2023- SDN Firewall Project with POX

    # build hackers-44

    import pox.lib.packet as pkt

    import pox.openflow.libopenflow_01 as of

    from pox.lib.addresses import EthAddr

    from pox.lib.revent import *

    # You may use this space before the firewall_policy_processing function to add any extra function that you

    # may need to complete your firewall implementation.  No additional functions "should" be required to complete

    # this assignment.

    def firewall_policy_processing(policies):

        '''

        This is where you are to implement your code that will build POX/Openflow Match and Action operations to

        create a dynamic firewall meeting the requirements specified in your configure.pol file.  Do NOT hardcode

        the IP/MAC Addresses/Protocols/Ports that are specified in the project description - this code should use

        the values provided in the configure.pol to implement the firewall.

        The policies passed to this function is a list of dictionary objects that contain the data imported from the

        configure.pol file.  The policy variable in the "for policy in policies" represents a single line from the

        configure.pol file.  Each of the configuration values are then accessed using the policy['field'] command.

        The fields are:  'rulenum','action','mac-src','mac-dst','ip-src','ip-dst','ipprotocol','port-src','port-dst',

        'comment'.

        Your return from this function is a list of flow_mods that represent the different rules in your configure.pol file.

        Implementation Hints:

        The documentation for the POX controller is available at https://noxrepo.github.io/pox-doc/html .  This project

        is using the gar-experimental branch of POX in order to properly support Python 3.  To complete this project, you

        need to use the OpenFlow match and flow_modification routines (https://noxrepo.github.io/pox-doc/html/#openflow-messages

        for flow_mod and https://noxrepo.github.io/pox-doc/html/#match-structure for match.)  Also, do NOT wrap IP Addresses with

        IPAddr() unless you reformat the CIDR notation.  Look at the https://github.com/att/pox/blob/master/pox/lib/addresses.py

        for what POX is expecting as an IP Address.

        '''

        rules = []

        for policy in policies:

            # Enter your code here to implement matching and block/allow rules. See the links

            # in Implementation Hints on how to do this.

            # HINT: Think about how to use the priority in your flow modification.

            rule_match = of.ofp_match()

            if policy.get('mac-src') and policy.get('mac-src') != "-":

                rule_match.dl_src = EthAddr(policy.get('mac-src'))

            if policy.get('mac-dst') and policy.get('mac-dst') != "-":

                rule_match.dl_dst = EthAddr(policy.get('mac-dst'))

            if policy.get('ip-src') and policy.get('ip-src') != "-":

                rule_match.nw_src = policy.get('ip-src')

            if policy.get('ip-dst') and policy.get('ip-dst') != "-":

                rule_match.nw_dst = policy.get('ip-dst')

            if policy.get('ipprotocol') and policy.get('ipprotocol') != "-":

                rule_match.nw_proto = int(policy.get('ipprotocol'))

            if policy.get('port-src') and policy.get('port-src') != "-":

                rule_match.tp_src = int(policy.get('port-src'))

            if policy.get('port-dst') and policy.get('port-dst') != "-":

                rule_match.tp_dst = int(policy.get('port-dst'))

            rule_match.dl_type = 0x800

            rule = of.ofp_flow_mod()

            rule.match = rule_match

            action = policy.get('action')

            if action == 'Block':

                rule.priority = 0

            elif action == "Allow":

                rule.actions.append(of.ofp_action_output(port=of.OFPP_CONTROLLER))

                rule.priority = 50000

            # End Code Here

            print('Added Rule ', policy['rulenum'],': ', policy['comment'])

            rules.append(rule)

        return rules

    相关文章

      网友评论

          本文标题:2024-06-23sdn

          本文链接:https://www.haomeiwen.com/subject/vaxlcjtx.html