在Python中处理网络设备的无效凭证或登录错误异常

问题描述 投票:0回答:1

我对 Python 有点陌生,并尝试使用 Python 脚本在 csv 列表中的所有网络设备上运行。成功验证的设备给我输出没有问题,但很少有设备抛出一些无效的信用错误,我们如何处理这种类型的错误...?

file_csv = open('device_csv_test.txt','r')
lines = file_csv.readlines()
file_csv.close()
lines_ = [line.strip() for line in lines[1:]] 


# create list of IPs that we need to pull uptime

device_ip_list =[]
for line in lines_:
    device_data = line.split("\t")
    device_name = device_data[0]
    device_ip = device_data[1]
    device_ip_list.append(device_ip)



# function that gets system_info details

def system_info(ip):
    urllib3.disable_warnings()
    try:
        fw = firewall.Firewall(ip, username, password)
    except ValueError:
        print(f"{device_name} is no longer accessible OR might have invalid cred")
    else: 
        system_info = fw.op ("show system info", xml=True )                  # without xml=True, it is going to return object only , but with xml=True arg, it is return a string with xml data
        system_info_json = xmltodict.parse(system_info)        
        uptime = system_info_json["response"]["result"]["system"]["uptime"]
        device_name = system_info_json["response"]["result"]["system"]["hostname"]
        dict_ = [{'device_name':device_name ,'uptime': uptime}]
        writer.writerows(dict_)
        # writer.writerows([elm.values() for elm in dict_])       # parse value of dict


# write parsed data (hostname , uptime) into CSV file
start_time = timeit.default_timer()
with open ("new_csv.csv","w") as f:
    writer = csv.DictWriter(f, fieldnames= ['device_name','uptime'])     # create header
    writer.writeheader()                                             # write header in csv
    # writer = csv.writer(f)         t
   # f.write('hostname,uptime\n')
    for ips in device_ip_list:
        system_info(ips)
end_time = timeit.default_timer()
print(f"total time = {end_time - start_time}")

它生成以下错误:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 3878, in method
    super_method(self, *args, **kwargs)
  File "/home/admin/palo_nat/lib/python3.11/site-packages/pan/xapi.py", line 637, in keygen
    raise PanXapiError(self.status_detail)
pan.xapi.PanXapiError: URLError: code: 403 reason: Invalid Credential

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/admin/palo_uptime_test.py", line 70, in <module>
    system_info(ips)
  File "/home/admin/palo_uptime_test.py", line 53, in system_info
    system_info = fw.op ("show system info", xml=True )                  # without xml=True, it is going to return object only , but with xml=True arg, it is return a string with xml data
                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/firewall.py", line 242, in op
    return super(Firewall, self).op(
           ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 4047, in op
    element = self.xapi.op(cmd, vsys, False, extra_qs, retry_on_peer=retry_on_peer)
              ^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 4000, in xapi
    self._xapi_private = self.generate_xapi()
                         ^^^^^^^^^^^^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/firewall.py", line 255, in generate_xapi
    return super(Firewall, self).generate_xapi()
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 4072, in generate_xapi
    "api_key": self.api_key,
               ^^^^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 3994, in api_key
    self._api_key = self._retrieve_api_key()
                    ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 4159, in _retrieve_api_key
    xapi.keygen(retry_on_peer=False)
  File "/home/admin/palo_nat/lib/python3.11/site-packages/panos/base.py", line 3897, in method
    raise the_exception
panos.errors.PanURLError: URLError: code: 403 reason: Invalid Credential

感谢您的帮助...!!

寻找正确的异常来处理发布的错误。

python java python-3.x exception ansible
1个回答
0
投票

从错误输出中,您收到

403
错误:

pan.xapi.PanXapiError: URLError: code: 403 reason: Invalid Credential

这意味着 您输入的某些 IP+用户名+密码组合(csv 中的行)不正确

正如您所提到的,您的脚本确实适用于您登录的某些设备,但不适用于其他设备。鉴于这些信息,很明显脚本可能不是问题所在,但您的 IP+用户名+密码组合对于您收到此 403 错误的用户来说是不正确的。

调试技巧:

  1. 尝试通过某种不使用脚本的方法手动验证每个 IP+用户名+密码组合
  2. 如果建议 #1 没有产生任何结果,请检查如何从 csv 解析您的值。由于您是根据
    tab
    (
    \t
    ) 分隔符拆分行,因此请确保从 csv 解析的值中没有其他空白字符。请注意,像在开头那样调用
    line.strip()
    只会删除前导和尾随空格,即行首和行尾的空格。您可以轻松地使用文本编辑器进行检查,该编辑器可以显示空格并在其位置显示符号。例如,如果您的 csv 行看起来像 x.x.x.x\tusername\s\tpassword\n
    ,则 
    \s
     之后和将其与 
    username
     分开的制表符 (
    \t
    ) 之前的空格 (
    password
    ) 字符将使您解析的用户名: 
    username\s
     
© www.soinside.com 2019 - 2024. All rights reserved.