[j-nsp] PyEZ list SRX firewall policies
Wojciech Janiszewski
wojciech.janiszewski at gmail.com
Mon Jul 22 07:34:36 EDT 2019
Hi Floris,
I'm not Python programmer, but it seems that "secpol.app" (or "src" or
"dst") is sometimes string and sometimes it's a list of strings.
If it's a single string, then it's being split into characters by []
operator.
If's it's a list, then [] gives you a string (which is what you're looking
for) with the name of application, which you can strip and print.
print("Application: ", end=" ")
for x in range(len(secpol.app)):
print(secpol.app[x].strip(), end=" "), <<< here you
get characters or strings
print('')
isinstance(secpol.app, list) can help you choosing right way of printing
variable, by example:
print("Application: ", end=" ")
if isinstance(secpol.app, list):
print(', '.join(x.strip() for x in secpol.app))
else
print(secpol.app.strip())
Perhaps there are other, more proper ways of doing that in Python.
HTH,
Regards,
Wojciech
pon., 22 lip 2019 o 08:51 Floris Termorshuizen <floris at nedcomp.nl>
napisał(a):
> Hello!
>
> Currently playing around with PyEZ to retrieve the firewall policies from
> a SRX, and I have some issues with formatting/printing the source/dest/app
> names. I've created a custom YAML in Python for the Table/View combination
> and can run it against a SRX:
>
> === CODE ===
> myYAML = '''
> ---
> SecurityPolicyTable:
> rpc: get-firewall-policies
> args:
> from-zone: untrust
> to-zone: hq-lan
> item: //policy-information
> key: policy-name
> view: SecurityPolicyView
>
> SecurityPolicyView:
> fields:
> name: policy-name
> state: policy-state
> src: source-addresses/source-address/address-name
> dst: destination-addresses/destination-address/address-name
> app: applications/application/application-name
> '''
>
> globals().update(FactoryLoader().load(yaml.load(myYAML,
> Loader=yaml.FullLoader)))
>
> secpols = SecurityPolicyTable(dev)
> secpols.get()
> === ===
>
> This results (I believe) in a list/array containing every security
> policies, and a nested list/array containing the
> source/destination/applications, When I dump the output to XML with the
> command secpols.savexml(path='datadump.xml') I see all the data I would
> like to have (see attached for a sanitized example).
>
> When I loop through it I also see all the data, like policy name, and the
> source and destination addresses and so on. Problem is the formatting of
> the source and destination addresses, it looks like the addressbook item is
> sometimes 'split' per character into separate fields in the list.
>
> === CODE ===
> for secpol in secpols:
> print("Policy: " + secpol.name + ' ' + secpol.state)
>
> print("Source: ", end=" ")
> for x in range(len(secpol.src)):
> print(secpol.src[x].strip(), end=" "),
> print('')
>
> print("Destination: ", end=" ")
> for x in range(len(secpol.dst)):
> print(secpol.dst[x].strip(), end=" "),
> print('')
>
> print("Application: ", end=" ")
> for x in range(len(secpol.app)):
> print(secpol.app[x].strip(), end=" "),
> print('')
> print('----------------------------------------------')
> === ===
>
> So I loop through the policies, print every Secpol name and
> enabled/disabled, and then print the array/list containing the
> source/destination/application seperated by a space instead of a newline.
>
> This results in the following output:
> === OUTPUT ===
> > python getSecPolicies.py
> Password: ******
>
> Policy: rdp-to-clients enabled
> Source: home nedcomp-sdc
> Destination: a n y
> Application: m s - r d p
> ----------------------------------------------
> Policy: mailserver enabled
> Source: a n y
> Destination: m a i l s e r v e r
> Application: junos-smtp junos-imaps junos-https
> ----------------------------------------------
> Policy: http-to-dev enabled
> Source: h o m e
> Destination: dev-33 dev-90 dev-125
> Application: j u n o s - h t t p
> ----------------------------------------------
> Policy: buckaroo-to-dev enabled
> Source: a n y
> Destination: d e v - 9 0
> Application: j u n o s - h t t p
> ----------------------------------------------
> Policy: vpn-sstp enabled
> Source: a n y
> Destination: p e r f o r c e
> Application: junos-https junos-ping
> ----------------------------------------------
> === ===
>
> So it prints spaces in a addressbook item (Or newlines when omitting end="
> " in the print command), but strangely only when there is a single entry,
> when there are multiple entries is prints the list correctly.
>
> Does anyone know why this is happening? Should I look to Python or
> NETCONF/PyEZ as the source cause?
>
> Best regards,
> Floris Termorshuizen
>
> _______________________________________________
> juniper-nsp mailing list juniper-nsp at puck.nether.net
> https://puck.nether.net/mailman/listinfo/juniper-nsp
>
More information about the juniper-nsp
mailing list