2016-08-10 18 views
-1

私はリストを作成する設定ファイルの解析に助けを借りることができました。設定ファイル(下記参照)から。私は設定ファイルを読んで、インターフェイスの詳細を一覧表示するために自分のスクリプトを取得しようとしています。ネットワークエンジニア向けPython - ルータ設定の解析

PE1-Loopback0-1.1.1.1 255.255.255.255 
PE1-GigabitEthernet1.10-205.1.1.1 255.255.255.0 
PE1-GigabitEthernet1.999-10.10.1.1 255.255.255.0 
PE2-Loopback0-2.2.2.2 255.255.255.255 
PE2-GigabitEthernet1.10-205.1.1.2 255.255.255.0 
PE2-GigabitEthernet1.999-10.10.1.2 255.255.255.0 

私のスクリプトは次のようになります。私は私の出力は次のようになり、なぜ知っていると思う

PE1-Loopback0-1.1.1.1 255.255.255.255 
PE1-GigabitEthernet1.10-205.1.1.1 255.255.255.0 
PE1-GigabitEthernet1.999-10.10.1.1 255.255.255.0 
PE1-Loopback0-2.2.2.2 255.255.255.255 
PE1-GigabitEthernet1.10-205.1.1.2 255.255.255.0 
PE1-GigabitEthernet1.999-10.10.1.2 255.255.255.0 

:MYスクリプトから

import random, re, pprint 
from collections import defaultdict 

routerconfig = open('C:/Users/adrian/workspace/Learning Python/configfile.txt', 'r') 

for line1 in iter(routerconfig): #for loop 1. Pulls out host name 
    HostNameRGX = re.search(r'hostname .*', line1) 

    if HostNameRGX: 
     HostNameGRP = HostNameRGX.group() 
     HostName = (HostNameGRP[9:]) 

     for line2 in iter(routerconfig): #for loop 2. finds interface details 
      IPAddressRGX = re.search(r'[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*.*255\.255.*',line2) 
      InterfaceRGX = re.search(r'Loop.*|Giga.*',line2) 

      if InterfaceRGX: 
        Interface=InterfaceRGX.group() 

      if IPAddressRGX: 
       IPAddress = IPAddressRGX.group() 
       InterfacePair = (Interface + '-' + IPAddress) 
       print(HostName + '-' + InterfacePair) 

routerconfig.close() 

OUTPUT。最初のforループ(forループ1)はホスト名の正規表現を実行し、2番目のforループ(forループ2)に続きます。それは私の問題があると思うところです。最初のループがPE1を報告し続けている間、2番目のループは、私の正規表現のパラメータの下で設定ファイルを解析し続けます。別のホスト名のエントリが見えるときに2番目のループを終了したいので、私のスクリプトはPE1とは別にPE2のインターフェースの詳細の設定を解析できます。

結果は次のようになります。

PE1-Loopback0-1.1.1.1 255.255.255.255 
PE1-GigabitEthernet1.10-205.1.1.1 255.255.255.0 
PE1-GigabitEthernet1.999-10.10.1.1 255.255.255.0 
PE2-Loopback0-2.2.2.2 255.255.255.255 
PE2-GigabitEthernet1.10-205.1.1.2 255.255.255.0 
PE2-GigabitEthernet1.999-10.10.1.2 255.255.255.0 

設定ファイル:

hostname PE1 
! 
! 
interface Loopback0 
ip address 1.1.1.1 255.255.255.255 
! 
interface Tunnel999 
ip unnumbered Loopback0 
mpls ip 
mpls label protocol ldp 
tunnel mode mpls traffic-eng 
tunnel destination 2.2.2.2 
tunnel mpls traffic-eng autoroute announce 
tunnel mpls traffic-eng path-option 10 dynamic 
tunnel mpls traffic-eng path-selection metric te 
tunnel mpls traffic-eng name PE1-TO-PE2 
! 
interface GigabitEthernet1 
no ip address 
negotiation auto 
ip rsvp bandwidth 
! 
interface GigabitEthernet1.10 
encapsulation dot1Q 10 
ip address 205.1.1.1 255.255.255.0 
mpls ip 
mpls label protocol ldp 
mpls traffic-eng tunnels 
mpls traffic-eng administrative-weight 100 
ip rsvp bandwidth 99 
! 
interface GigabitEthernet1.999 
encapsulation dot1Q 999 
ip address 10.10.1.1 255.255.255.0 
! 


hostname PE2 
! 
! 
interface Loopback0 
ip address 2.2.2.2 255.255.255.255 
! 
interface Tunnel999 
ip unnumbered Loopback0 
mpls ip 
mpls label protocol ldp 
tunnel mode mpls traffic-eng 
tunnel destination 2.2.2.2 
tunnel mpls traffic-eng autoroute announce 
tunnel mpls traffic-eng path-option 10 dynamic 
tunnel mpls traffic-eng path-selection metric te 
tunnel mpls traffic-eng name PE1-TO-PE2 
! 
interface GigabitEthernet1 
no ip address 
negotiation auto 
ip rsvp bandwidth 
! 
interface GigabitEthernet1.10 
encapsulation dot1Q 10 
ip address 205.1.1.2 255.255.255.0 
mpls ip 
mpls label protocol ldp 
mpls traffic-eng tunnels 
mpls traffic-eng administrative-weight 100 
ip rsvp bandwidth 99 
! 
interface GigabitEthernet1.999 
encapsulation dot1Q 999 
ip address 10.10.1.2 255.255.255.0 
+0

は、これまで任意のコードをお持ちですか? –

+0

@ cricket_007、 コードの推奨事項はありません。私はまだ自分自身で(失敗して)作業しようとしています。 – adrian

+0

予想される出力を表示するために編集していることは素晴らしいことですが、コードを書くつもりはありません。あなたはその部分にいくつかの試みをし、あなたのために働いていないものを説明する必要があります。詳細については、[良い質問をする方法](http://stackoverflow.com/help/how-to-ask)を参照してください。 –

答えて

0

!!!解決しよう!!!

''' 
Created on Aug 9, 2016 

@author: adrian 
''' 
import random, re, pprint 
from collections import defaultdict 
DOT1Q='' 
Routers={} 
routerconfig = open('configfile.txt', 'r') 

for line1 in iter(routerconfig): 
    line1 = line1.rstrip('\n') 

    if re.match(r'hostname.*', line1): 
     HostName = line1[9:] 

    else: 
     if re.search(r'interface (Loop.*|Giga.*\.[0-9].*)',line1): 
      Interface = line1[9:] 


     if re.search(r'encap.*dot1[qQ].*',line1): 
      DOT1Q = '-' + line1[21:] 


     if re.search(r'ip address.*[0-9]*\.[0-9]*\.[0-9]*\.[0-9]*.*255\.255.*',line1): 
      IPAddress = line1[12:] 

      Final=Interface+'-'+IPAddress+DOT1Q 
      Routers.setdefault(HostName, []).append(Final) 
      print HostName+'-'+Interface+'-'+IPAddress+DOT1Q 
      DOT1Q='' 
print '\n\n' 

routerconfig.close() 
pprint.pprint(Routers), 

OUTPUT

PE1- Loopback0-1.1.1.1 255.255.255.255 
PE1- GigabitEthernet1.10-205.1.1.1 255.255.255.0-10 
PE1- GigabitEthernet1.999-10.10.1.1 255.255.255.0-999 
PE2- Loopback0-2.2.2.2 255.255.255.255 
PE2- GigabitEthernet1.10-205.1.1.2 255.255.255.0-10 
PE2- GigabitEthernet1.999-10.10.1.2 255.255.255.0-999 
PE3- Loopback0-3.3.3.3 255.255.255.255 
PE3- GigabitEthernet1.10-205.1.1.3 255.255.255.0-10 
PE3- GigabitEthernet1.999-10.10.1.3 255.255.255.0-999 



{'PE1': [' Loopback0-1.1.1.1 255.255.255.255', 
     ' GigabitEthernet1.10-205.1.1.1 255.255.255.0-10', 
     ' GigabitEthernet1.999-10.10.1.1 255.255.255.0-999'], 
'PE2': [' Loopback0-2.2.2.2 255.255.255.255', 
     ' GigabitEthernet1.10-205.1.1.2 255.255.255.0-10', 
     ' GigabitEthernet1.999-10.10.1.2 255.255.255.0-999'], 
'PE3': [' Loopback0-3.3.3.3 255.255.255.255', 
     ' GigabitEthernet1.10-205.1.1.3 255.255.255.0-10', 
     ' GigabitEthernet1.999-10.10.1.3 255.255.255.0-999']} 
関連する問題