表示带有抽象的Fortinet Fortigate Rest接口的基本组件

pyfgt的Python项目详细描述


概要

表示Fortinet Fortigate Rest接口的基本组件。此代码基于Fortinet开发人员网络(FNDN)上提供的ftntlib包中提供的Fortigate代码,最初由多人编写,包括Ashton Turpin。此后,Fortinet内部的其他几家公司对其进行了修改。现在已经对其进行了优化和修改,以利用标准的**Kwargs功能,并进行了广泛的修改,以提高可伸缩性,并提供上下文管理和其他方面,包括处理与最新版本的Forti一起添加的API密钥功能。操作系统代码。< /P>

代码示例

采用Fortigate Rest的标准格式。

重要的是此包对Fortigate实例使用上下文行为,因此可以使用带的关键字。这将确保fortigate实例在实例化时登录,并在with语句的作用域完成后注销。例如,要实例化IP地址为10.1.1.1、用户名为admin、密码为<;blank>;的Fortigate实例,用户只需键入:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:

显然不必使用上下文管理器。但是,如果未使用,则不会为调用方处理登录注销功能。如果未使用上下文管理器,则将调用这些方法。注*,API密钥功能副密码将在本文档后面讨论。不使用上下文管理器的一个例子是:

fgt_instance = FortiGate("10.1.1.1", "admin", "")
fgt_instance.login()
*something of importance accomplished here*
fgt_instance.logout()

继续,当一个Fortigate实例被实例化时,以下属性被配置(或者可以由用户配置)。提供的列表列出了默认值。

- passwd (default None)
- apikeyused (default False)
- debug (default False),
- use_ssl (default True),
- verify_ssl (default False),
- timeout (default 300)

例如,要实例化一个IP地址为10.1.1.1、用户名为admin、密码为<;blank>;、使用http而不是https的Fortigate实例,该实例处于调试模式,并在每次请求验证SSL证书后发出警告,超时时间为100。SER只需键入:

with FortiGate("10.1.1.1", "admin", "", debug=True, use_ssl=False, debug=True, disable_request_warnings=False, timeout=100) as fgt_instance:

稍后将讨论api密钥的使用,但这里必须理解,要使用api密钥而不是密码,唯一需要发生的事情是必须在实例化中明确调用属性。尽管用户名不需要使用api密钥,但它在这个库中是必需的,因为它保持了一致性。除了使用api密钥管理功能外,上述调用的示例如下:

with FortiGate("10.1.1.1", "admin", apikey="12345678910", debug=True, use_ssl=False, debug=True, disable_request_warnings=False, timeout=100) as fgt_instance:

显然,如果没有使用上下文管理器,这些相同的参数将在标准调用中使用,因此:

fgt_instance = FortiGate("10.1.1.1", "admin", "", debug=True, use_ssl=False, debug=True, disable_request_warnings=False, timeout=100)

fgt_instance = FortiGate("10.1.1.1", "admin", apikey="12345678910", debug=True, use_ssl=False, debug=True, disable_request_warnings=False, timeout=100)

虽然这个模块应该与另一个调用方编写的抽象一起使用,但是没有理由这个模块不能被自己用来进行详细的、多参数的调用。为此,提供了一种功能,使关键字/值参数能够传递到任何getdeletepostput助手方法中。由于Fortigate正文中有许多关键字需要破折号(并且由于破折号字符不允许作为由**Kwargs指针处理的关键字参数),因此添加了一个功能,以便自动添加带有双下划线的关键字当关键字/值对放入调用主体时,转换为破折号。下面是一个示例(请注意关键字项中的双下划线,当调用时,它们将转换为破折号):

fgt.post("/cmdb/vpn.ipsec/phase1-interface", p1name1", "port1", "1.1.1.1", 2, "2.2.2.2", "topsecret", "vdom=root", dpd="on-demand", proposal="aes128-sha1", keylife=28800, authmethod="psk", dpd__retryinterval=10, peertype="any")

此功能很有帮助,但下面的测试部分显示了一种更明显的方法,可以更清楚地进行此类调用,其中有效地使用了标准字典。在这种情况下,双下划线翻译为不需要破折号,破折号可以正常工作(见下文)。

另一个功能已经到位,允许在进行fgt调用时应用querystring。如果用户想确保某个vdom被寻址,那么这个调用会有什么结果呢?vdom=vdomname,位于以基本查询字符串格式调用的URL终结点的末尾。然而,fgt api也可以利用过滤器和格式函数,这些函数可以有效地使用,甚至是querystring选项的进一步要求。在这个库中,使用*args指针,并使用列表中提供的每个字符串追加到调用的url。一个例子是执行get函数,在vdomroot中查找名为test_object的地址对象。呼叫方式如下:

fgt.get("/cmdb/firewall/address", "vdom=root", "format=name", "filter=name==test_object")

因为这些参数没有命名,也不是键值格式,所以它们被发送到*args指针上,并用作查询字符串。输出如预期:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:
0

请注意,只有name属性(当然还有键)和特定对象会按请求返回。

例外情况

该模块提供以下例外情况以供使用:

  1. fgtbaseexception(异常)
  2. fgtValidSessionException(fgtBaseException)
  3. fgtvalueerror(valueerror)
  4. fgtresponsenotformedcorrect(键错误)
  5. fgtconnectionerror(reqconnerror)
  6. fgtconnecttimeout(reqconnttimeout):

fgtbaseexception是模块的基本异常,可用于捕获valueerror和keyerror问题之外的所有内容。

然后,调用方可以编写以下内容,并拥有与标准的调用等效的调用,除了不提及异常的调用。这确保了可扩展性:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:
1

fgtvalidsessionexception已添加,如果在未与fgt建立有效连接的情况下尝试任何调用,则会引发该异常。在过去,除了在登录返回后检查对象的_u str()uuu值之外,尽管没有有效的会话,代码仍会继续尝试进行调用。现在在无效会话上尝试的任何调用都将引发此错误。作为警告-如果使用的是API密钥版本(不使用会话概念),而不是用户和密码,则会伪造会话,因此不会引发此错误。

fgtvalueerror是标准值错误,在尝试连接或使用无效值进行调用的特殊情况下会被捕获。例如,连接到fgt实例的超时值为<;=0。

当从fgt实例接收的响应在响应中没有正确的返回属性时,将引发fgtresponsenotformedcorrect。没有这些属性的fgt响应格式错误,将引发此错误。唯一的例外是来自有效login()调用的响应。此异常将被抑制,并为登录创建有效的响应,以确保从模块返回稳定、标准和恒定的响应。

fgtconnectionerrorfgtconnecttimeout在捕获到请求。异常。connectionerror请求。异常。connecttimeout异常时引发。这确保调用代码不需要导入/依赖请求模块来处理请求连接异常。fgtconnectionerror最有可能在login()处引发,原因可能是fgt设备的主机名或IP地址不正确。

异常被允许向调用方提出,并且只在某些情况下被捕获,在要求详细模式并且调用方希望打印出异常时需要这些异常。打印完成后,将引发并提出相同的异常,以便调用方可以捕获和处理该异常,或将其用作调试工具。

响应

< P>这个模块提供了标准的响应机制,因此调用对象知道要返回什么。除非抛出异常,否则此模块将返回一个2对象元组,该元组由返回的响应状态代码组成,后跟有效的json消息或整个json响应。由于登录不提供来自fgt设备的恒定响应,因此此模块提供一个响应,以确保调用方知道将返回什么以及以什么格式返回。登录、get call和注销过程的响应示例如下:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:
2

动机

此软件包支持可靠的需求和适当的模块利用率,但是,它可以用于与任何Fortinet Fortigate设备或虚拟机资产的联系。

安装

将通过PIP接口安装此软件包

测试

使用库相对简单。

假设您处于WITH上下文中,并且仍像以前一样使用fgt_instance,要获取根目录中的所有地址对象,将使用以下命令:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:
3

若要添加成员地址对象为autoupdate.opera.com的地址组,请使用以下命令:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:
4

注意如何创建数据字典,然后作为**数据发送。如果字典的键中需要破折号,则可以这样做。如果您不想使用双下划线方法来缓解这个问题,那么上面的方法就是处理这个问题的方法,因为在对象中构建json不存在这个问题。电话可能是:

with FortiGate("10.1.1.1", "admin", "") as fgt_instance:
5

请注意,您只需将需要发送到Fortigate设备的数据发送到**Kwargs字段-这使得调用非常简单-发送一个URL和关键字参数,其余的都会得到处理。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Intellij新项目JDK不可用   JAVA静态块执行了多少次?   java通过JCheckBox更改文本字段输入的字体颜色   java在星期几文本字段中输入值   java RichFaces 4.2日历。如何通过JavaScript设置日历的输入字段?   java在javafx中注册鼠标处理程序,但处理程序不是内联的   java将jchararray分配给常量unsigned char   在安卓4.4中注意到java奇怪的圆形浮动动作按钮吗?   java中用于解决8个难题的合适的树类是什么   为什么Java在我的Linux服务器上使用了如此多的内存?   java从多个推荐列表中提取顶级推荐   “426写入网络流失败。”尝试使用Java的URL类连接到FTP站点时收到   java如何在没有Gradle的情况下使用IntelliJ打开项目?   java如何在线程完成后使For循环继续?   java使用定制jackson ObjectMapper定制Spring引导序列化过程   java NativeActivity不会显示在屏幕上   如何使用Java中的EditorConfig在IntelliJ IDEA中关闭rightparen自己的行?   java从字符串中删除字母数字单词   Intellij IDEA 13.1中的maven Java编译错误