Skip to main content

No project description provided

Project description

muddy

PyPI version

muddy is a python package and CLI tool for generating MUD files (RFC8520).

Usage

There are multiple ways to generate MUD objects, depending on the level of abstraction:

from muddy.maker import make_mud
from muddy.models import Direction, IPVersion, Protocol, MatchType

mud = make_mud(1,'https://lighting.example.com/lightbulb2000', 48, True, 'The BMS Example Light Bulb', 
'https://lighting.example.com/lightbulb2000/documentation', [Direction.TO_DEVICE,Direction.FROM_DEVICE],
 IPVersion.IPV4, 'test.example.com', Protocol.ANY, MatchType.IS_MYMFG, [88,443], [88,443])

or

from muddy.maker import make_mud, make_support_info
from muddy.models import Direction, IPVersion, Protocol, MatchType

support_info = make_support_info(1,'https://lighting.example.com/lightbulb2000', 48, True,
 'The BMS Example Light Bulb', 'https://lighting.example.com/lightbulb2000/documentation')

mud = make_mud(support_info , [Direction.TO_DEVICE,Direction.FROM_DEVICE],
 IPVersion.IPV4, 'test.example.com', Protocol.ANY, [88,443], [88,443], MatchType.IS_MYMFG)

or

from muddy.maker import make_mud, make_acl_names, make_policy, make_acls
from muddy.models import Direction, IPVersion, Protocol, MatchType
import random

mud_name = f'mud-{random.randint(10000, 99999)}'
acl = []
policies = {}
for direction_initiated in [Direction.TO_DEVICE,Direction.FROM_DEVICE]:
    acl_names = make_acl_names(mud_name, IPVersion.IPV4, direction_initiated)
    policies.update(make_policy(direction_initiated, acl_names))
    acl.append(make_acls([IPVersion.IPV4], 'test.example.com', Protocol.ANY, [88,443], [88,443], MatchType.IS_MYMFG,
    direction_initiated, acl_names))

mud = make_mud(policies, acl, 1,'https://lighting.example.com/lightbulb2000', 48, True, 'The BMS Example Light Bulb', 
'https://lighting.example.com/lightbulb2000/documentation')

or

from muddy.maker import make_mud, make_acl_names, make_policy, make_acls, make_support_info
from muddy.models import Direction, IPVersion, Protocol, MatchType
import random

support_info = make_support_info(1,'https://lighting.example.com/lightbulb2000', 48, True,
 'The BMS Example Light Bulb', 'https://lighting.example.com/lightbulb2000/documentation')


mud_name = f'mud-{random.randint(10000, 99999)}'
acl = []
policies = {}
for direction_initiated in [Direction.TO_DEVICE,Direction.FROM_DEVICE]:
    acl_names = make_acl_names(mud_name, IPVersion.IPV4, direction_initiated)
    policies.update(make_policy(direction_initiated, acl_names))
    acl.append(make_acls([IPVersion.IPV4], 'test.example.com', Protocol.ANY, [88,443], [88,443], MatchType.IS_MYMFG,
    direction_initiated,acl_names))

mud = make_mud(support_info, policies, acl)

To obtain JSON for a MUD object, you may just json.dumps(mud).

Example output

{
  "ietf-mud:mud": {
    "mud-version": 1,
    "mud-url": "https://lighting.example.com/lightbulb2000",
    "last-update": "2019-07-23T19:54:24",
    "cache-validity": 48,
    "is-supported": true,
    "systeminfo": "The BMS Example Light Bulb",
    "documentation": "https://lighting.example.com/lightbulb2000/documentation",
    "to-device-policy": {
      "access-lists": {
        "access-list": [
          {
            "name": "mud-52892-v4to"
          }
        ]
      }
    },
    "from-device-policy": {
      "access-lists": {
        "access-list": [
          {
            "name": "mud-52892-v4fr"
          }
        ]
      }
    }
  },
  "ietf-access-control-list:acls": {
    "acl": [
      {
        "name": "mud-52892-v4to",
        "type": "ipv4",
        "aces": {
          "ace": [
            {
              "name": "myman0-todev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            },
            {
              "name": "myman1-todev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            },
            {
              "name": "myman1-todev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            },
            {
              "name": "myman2-todev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      },
      {
        "name": "mud-52892-v4fr",
        "type": "ipv4",
        "aces": {
          "ace": [
            {
              "name": "myman0-frdev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            },
            {
              "name": "myman1-frdev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            },
            {
              "name": "myman1-frdev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            },
            {
              "name": "myman2-frdev",
              "matches": {
                "ietf-mud:mud": {
                  "same-manufacturer": []
                }
              },
              "actions": {
                "forwarding": "accept"
              }
            }
          ]
        }
      }
    ]
  }
}

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

muddy-2019.7.25.post2.tar.gz (8.9 kB view details)

Uploaded Source

Built Distribution

muddy-2019.7.25.post2-py3-none-any.whl (10.6 kB view details)

Uploaded Python 3

File details

Details for the file muddy-2019.7.25.post2.tar.gz.

File metadata

  • Download URL: muddy-2019.7.25.post2.tar.gz
  • Upload date:
  • Size: 8.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

File hashes

Hashes for muddy-2019.7.25.post2.tar.gz
Algorithm Hash digest
SHA256 6ea391e24469b5d820c0750e50c2a4efd4b572cf3106fb0285faf7b7cb9f83d0
MD5 e18719222712e6661de0180657ac0c36
BLAKE2b-256 dce8ab14f192c4780240531b2999ca0231c54be2c1fe85122c6801ca2dd69c98

See more details on using hashes here.

File details

Details for the file muddy-2019.7.25.post2-py3-none-any.whl.

File metadata

  • Download URL: muddy-2019.7.25.post2-py3-none-any.whl
  • Upload date:
  • Size: 10.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.13.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.4

File hashes

Hashes for muddy-2019.7.25.post2-py3-none-any.whl
Algorithm Hash digest
SHA256 f360e1914ad97576c065eea9faed1a4911cf45b5d07278b7ea949cfbb5c6ce36
MD5 ac194c487fc6da41ad2070e73d0ae9d2
BLAKE2b-256 62f59859acbe4405b8263903c20d04e0834df6f1923606b22260a4c1eaf5ab8f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page