gpt4 book ai didi

python - Infoblox WAPI : how to search for an IP

转载 作者:行者123 更新时间:2023-11-30 23:36:23 26 4
gpt4 key购买 nike

我们的网络团队使用 InfoBlox存储有关 IP 范围的信息(位置、国家/地区等)有一个 API 可用,但 Infoblox 的文档和示例不是很实用。

我想通过 API 搜索有关 IP 的详细信息。首先 - 我很乐意从服务器拿回任何东西。我修改了the only example I found

import requests
import json

url = "https://10.6.75.98/wapi/v1.0/"
object_type = "network"
search_string = {'network':'10.233.84.0/22'}

response = requests.get(url + object_type, verify=False,
data=json.dumps(search_string), auth=('adminname', 'adminpass'))

print "status code: ", response.status_code
print response.text

返回错误 400

status code:  400
{ "Error": "AdmConProtoError: Invalid input: '{\"network\": \"10.233.84.0/22\"}'",
"code": "Client.Ibap.Proto",
"text": "Invalid input: '{\"network\": \"10.233.84.0/22\"}'"
}

如果有人能够让这个 API 与 Python 配合使用,我将不胜感激。

<小时/> 更新:跟进解决方案,下面是一段代码(它可以工作,但它不是很好,精简,不能完美地检查错误等),如果有一天有人需要的话和我一样做。

def ip2site(myip): # argument is an IP we want to know the localization of (in extensible_attributes)
baseurl = "https://the_infoblox_address/wapi/v1.0/"

# first we get the network this IP is in
r = requests.get(baseurl+"ipv4address?ip_address="+myip, auth=('youruser', 'yourpassword'), verify=False)
j = simplejson.loads(r.content)
# if the IP is not in any network an error message is dumped, including among others a key 'code'
if 'code' not in j:
mynetwork = j[0]['network']
# now we get the extended atributes for that network
r = requests.get(baseurl+"network?network="+mynetwork+"&_return_fields=extensible_attributes", auth=('youruser', 'youpassword'), verify=False)
j = simplejson.loads(r.content)
location = j[0]['extensible_attributes']['Location']
ipdict[myip] = location
return location
else:
return "ERROR_IP_NOT_MAPPED_TO_SITE"

最佳答案

通过使用 requests.get 和 json.dumps,您是否在向查询字符串添加 JSON 的同时发送 GET 请求?本质上,做一个

GET https://10.6.75.98/wapi/v1.0/network?{\"network\": \"10.233.84.0/22\"}

我一直在 Perl 中使用 WebAPI,而不是 Python,但如果这就是您的代码尝试执行操作的方式,它可能不会很好地工作。要将 JSON 发送到服务器,请执行 POST 并添加一个“_method”参数,并将“GET”作为值:

POST https://10.6.75.98/wapi/v1.0/network

Content: {
"_method": "GET",
"network": "10.233.84.0/22"
}

Content-Type: application/json
<小时/>

或者,不将 JSON 发送到服务器并发送

GET https://10.6.75.98/wapi/v1.0/network?network=10.233.84.0/22

我猜你可以通过从代码中删除 json.dumps 并将 search_string 直接传递给 requests.get 来实现。

关于python - Infoblox WAPI : how to search for an IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16549530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com