2016-09-29 16 views
0

私はCisco ASAファイアウォールへのAPI呼び出しを行うPythonスクリプトを作成しており、ファイアウォールから返された情報は辞書に入れられます。次に、この辞書を解析して特定の文字列を検索する必要があります。問題は、1つの鍵と1つの大きな価値に見えるものがあることです。ファイアウォールから受け取った出力の例を挿入しました。特定の文字列を検索する構文解析辞書

{u'response ':[u'object基ネットワーク NG-ENC-着信FTP-外\ nnetworkオブジェクト1.1.1.1 255.255.255.128 \ N ネットワーク・オブジェクト・ホスト2.2.2.2を\ nはネットワーク・オブジェクトのホスト3.3.3.3 \ nは ネットワーク・オブジェクトのホスト4.4.4.4 \ n個のネットワーク・オブジェクトのホスト5.5.5.5]}

理想的には、私は特定のIPを探して、この出力を検索したいとそのIPが存在する場合は、それを示すメッセージを表示します。私は、特定のテキスト文字列を探して本当に長い値を解析する良い方法を見つけることができないようです。

答えて

2

だけ特定のIPは、応答文字列であるかどうかを知りたい場合は、あなたがin演算子を使用することができます

if '2.2.2.2' in resp_dict['response'][0]: 
    print('Found') 

または一般:すべてのIP

ip = '2.2.2.2' 
if ip in resp_dict['response'][0]: 
    print('{} found'.format(ip)) 
+2

resp_dict [ '応答']確かに[0] –

+0

@LaurensKoppenolを言うように別の方法として、あなたは、文字列で直接検索することができます。ありがとう。 – DeepSpace

0

エキスをし、リスト内の特定のIPアドレスを検索したり、すべてのIPアドレスをループすることができます。 @DeepSpaceが

import re 

d = {u'response': [u'object-group network ng-enc-incoming-ftp-outside\n network-object 1.1.1.1 255.255.255.128\n network-object host 2.2.2.2\n network-object host 3.3.3.3\n network-object host 4.4.4.4\n network-object host 5.5.5.5']} 

ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', d['response'][0]) 

>>> [u'1.1.1.1', u'255.255.255.128', u'2.2.2.2', u'3.3.3.3', u'4.4.4.4', u'5.5.5.5'] 

'1.1.1.1' in ip 
>>> True 

'1.1.1.2' in ip 
>>> False