Regela icon

pyroute2 nftables expressions

Regela | PRO | 06/26/23 09:58:35 PM UTC | 0 ⭐ | 2463 👁️ | Never ⏰ | []
Python |

6.57 KB

|

None

|

0 👍

/

0 👎

 
from pyroute2.common import hexload
def oifname(name: str):
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'meta'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_META_KEY',
                              7),
                             ('NFTA_META_DREG',
                              0x01)
                         ]
                     })
                ]
            },
            {
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'cmp'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_CMP_SREG',
                              0x01),
                             ('NFTA_CMP_OP',
                              0),
                             ('NFTA_CMP_DATA',
                              {
                                  'attrs': [
                                      ('NFTA_DATA_VALUE',
                                       name)
                                  ]
                              })
                         ]
                     })
                ]
            })
 
 
def iifname(name):
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'meta'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_META_KEY',
                              6),
                             ('NFTA_META_DREG',
                              0x01)
                         ]
                     })
                ]
            },
            {
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'cmp'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_CMP_SREG',
                              0x01),
                             ('NFTA_CMP_OP',
                              0),
                             ('NFTA_CMP_DATA',
                              {
                                  'attrs': [
                                      ('NFTA_DATA_VALUE',
                                       name)
                                  ]
                              })
                         ]
                     })
                ]
            },)
 
 
def counter():
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'counter'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_COUNTER_BYTES',
                              0),
                             ('NFTA_COUNTER_PACKETS',
                              0)
                         ]
                     })
                ]
            },)
 
 
def masquerade():
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'masq'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
 
                         ]
                     })
                ]
            },)
 
 
def l4proto(proto: str = 'tcp'):
    match proto:
        case 'tcp':
            proto = b'\x06'
        case 'udp':
            proto = b'\x11'
        case _:
            proto = b'\x00'
 
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'meta'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_META_KEY',
                              16),
                             ('NFTA_META_DREG',
                              0x01)
                         ]
                     })
                ]
            },
            {
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'cmp'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_CMP_SREG',
                              0x01),
                             ('NFTA_CMP_OP',
                              0),
                             ('NFTA_CMP_DATA',
                              {
                                  'attrs': [
                                      ('NFTA_DATA_VALUE',
                                       proto)
                                  ]
                              })
                         ]
                     })
                ]
            },)
 
 
def accept():
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'immediate'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_IMMEDIATE_DREG',
                              0x00),
                             ('NFTA_IMMEDIATE_DATA',
                              {
                                  'attrs': [
                                      ('NFTA_DATA_VERDICT',
                                       {
                                           'attrs': [
                                               ('NFTA_VERDICT_CODE',
                                                1)
                                           ]
                                       })
                                  ]
                              })
                         ]
                     })
                ]
            },)
 
 
def convert_to_hex(number):
    hex_string = '00:00:ff:ff:'
    hex_string += format(number, '02x') + ':'
    hex_string += format(number, '02x') + ':'
    hex_string += '00:00:00:00:00:00:00:00'
    return hex_string
 
 
def udp_dport(port=80):
    return ({
                'attrs': [
                    ('NFTA_EXPR_NAME',
                     'match'),
                    ('NFTA_EXPR_DATA',
                     {
                         'attrs': [
                             ('NFTA_MATCH_NAME',
                              'udp'),
                             ('NFTA_MATCH_REV',
                              0),
                             ('NFTA_MATCH_INFO',
                              b'\x00\x00\xff\xff5\x005\x00\x00\x00\x00\x00\x00\x00\x00\x00')
                         ]
                     })
                ]
            },)

Comments