私のPythonスクリプトは、私のXML rpc要求を返す前に自分のnetconfセッションを終了しています。私のXML rpcは、ルータのNetconfセッションに直接接続すると動作します。誰かが私にこれを理解させるのを助けてくれますか? NCCLIENTライブラリを使用したくない場合は、Netconf APIへのソケットを直接オープンします。Pythonスクリプトから終了するNetconf接続
ルータ= 5.3.4のX rv のPython = 2.7
Pythonのコード:
import paramiko
import socket
import time
import sys
ROUTER_IP = 'x.x.x.x'
USERNAME = 'adrian'
PASSWORD = 'xxxxxx'
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(
paramiko.AutoAddPolicy())
Send_XML = """
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="106" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter>
<Configuration>
<InterfaceConfigurationTable/>
</Configuration>
</filter>
</get-config>
</rpc>
]]>]]>"""
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
socket.connect((ROUTER_IP, 830))
trans = paramiko.Transport(socket)
trans.connect(username=USERNAME, password=PASSWORD)
# CREATE CHANNEL FOR DATA COMM
ch = trans.open_session()
name = ch.set_name('netconf')
# Invoke NETCONF
ch.invoke_subsystem('netconf echo format')
# SEND COMMAND
ch.send(Send_XML)
# Recieve data returned
data = ch.recv(2048)
while data:
data = ch.recv(1024)
print data,
if data.find('</rpc-reply>') == 0:
# We have reached the end of reply
print "END!!"
break
ch.close()
trans.close()
socket.close()
出力
C:\Python27\python.exe "C:/Users/adrian/OneDrive/Python/DevNet/XR NCClient.py"
g/Cisco-IOS-XR-ha-eem-cfg?module=Cisco-IOS-XR-ha-eem-cfg&revision=2013-07-22</capability>
<capability>http://cisco.com/ns/yang/Cisco-IOS-XR-ha-eem-oper?
.
.
.
<capability>urn:ietf:params:xml:ns:yang:ietf-yang-types?module=ietf-yang-types&revision=2013-07-15</capability>
</capabilities>
<session-id>21415</session-id>
</hello>
]]>]]>
Process finished with exit code 0
ダイレクトコネクト
SSH x.x.x.x -p 830 NETCONFエコー形式のPythonスクリプトからの出力に基づいて
<?xml version="1.0" encoding="UTF-8"?>
<rpc message-id="106" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<get-config>
<source>
<running/>
</source>
<filter>
<Configuration>
<InterfaceConfigurationTable/>
</Configuration>
</filter>
</get-config>
</rpc>
]]>]]>
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply message-id="106" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<data>
<Configuration>
<InterfaceConfigurationTable MajorVersion="5" MinorVersion="4">
<InterfaceConfiguration>
<Naming>
.
.
.
</InterfaceConfigurationTable>
</Configuration>
</data>
</rpc-reply>
]]>]]>