예제 #1
0
    def test_extends(self):
        host = Record({
            "host": IPv4Address(required=True),
            "time": DateTime(required=True),
            "data": SubRecord({}),
            "error": String()
        })
        banner_grab = Record({"data": SubRecord({"banner": String()})},
                             extends=host)
        tls_banner_grab = Record({"data": SubRecord({"tls": SubRecord({})})},
                                 extends=banner_grab)
        smtp_starttls = Record({"data": SubRecord({"ehlo": String()})},
                               extends=tls_banner_grab)

        valid = Record({
            "host":
            IPv4Address(required=True),
            "time":
            DateTime(required=True),
            "data":
            SubRecord({
                "banner": String(),
                "tls": SubRecord({}),
                "ehlo": String()
            }),
            "error":
            String()
        })
        self.assertEqual(smtp_starttls.to_dict(), valid.to_dict())
예제 #2
0
    def setUp(self):
        self.maxDiff = 10000

        heartbleed = SubRecord(
            {  # with explicit proto field indices
                "heartbeat_support":
                Boolean(pr_index=11),
                "heartbleed_vulnerable":
                Boolean(category="Vulnerabilities", pr_ignore=True),
                "timestamp":
                DateTime(pr_index=10)
            },
            pr_index=77)
        self.host = Record({
            "ipstr":
            IPv4Address(required=True, examples=["8.8.8.8"], pr_index=1),
            "ip":
            Unsigned32BitInteger(doc="The IP Address of the host", pr_index=2),
            Port(443):
            SubRecord({
                "tls": String(pr_index=1),
                "heartbleed": heartbleed
            },
                      category="heartbleed",
                      pr_index=3),
            "tags":
            ListOf(String(), pr_index=47)
        })
예제 #3
0
 def test_parses_ipv4_records(self):
     ipv4_host_ssh = Record({
         Port(22):
         SubRecord({
             "ssh":
             SubRecord({
                 "banner":
                 SubRecord({
                     "comment": String(),
                     "timestamp": DateTime()
                 })
             })
         })
     })
     ipv4_host_ssh.validate(json_fixture('ipv4-ssh-record'))
예제 #4
0
 def test_subrecord_type_override(self):
     SSH = SubRecordType(
         {
             "banner": SubRecord({
                 "comment": String(),
                 "timestamp": DateTime()
             })
         },
         doc="class doc",
         required=False)
     self.assertEqual(SSH.DOC, "class doc")
     self.assertEqual(SSH.REQUIRED, False)
     ssh = SSH(doc="instance doc", required=True)
     ipv4_host_ssh = Record({Port(22): SubRecord({"ssh": ssh})})
     self.assertEqual(ssh.doc, "instance doc")
     self.assertEqual(ssh.required, True)
     ipv4_host_ssh.validate(json_fixture('ipv4-ssh-record'))
     # class unchanged
     self.assertEqual(SSH.DOC, "class doc")
     self.assertEqual(SSH.REQUIRED, False)
예제 #5
0
 def test_datetime_DateTime(self):
     DateTimeRecord = DateTime(validation_policy="error")
     DateTimeRecord.validate("fake", datetime.datetime.now())
     DateTimeRecord.validate("fake", "Wed Dec  5 01:23:45 CST 1956")
     DateTimeRecord.validate("fake", 116048701)
예제 #6
0
from zschema.keys import Port
from zschema.compounds import ListOf, Record, SubRecord
from zschema.leaves import Boolean, DateTime, IPv4Address, String, Unsigned32BitInteger

heartbleed = SubRecord({
    "heartbeat_support": Boolean(),
    "heartbleed_vulnerable": Boolean(),
    "timestamp": DateTime()
})

host = Record({
    "ipstr": IPv4Address(required=True),
    "ip": Unsigned32BitInteger(),
    Port(443): SubRecord({
        "tls": String(),
        "heartbleed": heartbleed
    }),
    "tags": ListOf(String())
})