表示带有抽象的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第三方库


热门话题
无法在Netbeans 8.2 JDK8u231中创建java Maven项目(Web应用程序)   java如何以设定的时间间隔生成随机数?   java从socket和inputStream的慢速读取   spring SCORM:Java中基于Web的SCORM播放器   Java将函数传递给方法   java绑定通用服务及其实现和子类型   java如何在运行时从选择列表框中动态选择选项?爪哇硒   java Selenium WebDriver什么是“Selenium客户端和WebDriver语言绑定”   elasticsearch需要elasticsearch高级Java客户端更新ByQueryRequest API帮助   JAVA哈希表查找最大值   WSDL操作中的java soapAction属性为空   java访问封闭类或父类方法的一般方法   eclipse在java中运行带有SeleneTestCase的ANT。lang.NoClassDefFoundError   java Hazelcast不会在节点启动时填充ReplicatedMap   如何在Java中从excel中读取特定行?   html JAVA将本地时间(GMT+8)转换为UTC时间   java将自定义端点添加到Spring数据REST存储库中,并以大摇大摆的方式显示   java计算未来位置