日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备

發布時間:2023/12/2 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

現在,我們已經知道如何在不同的操作系統中使用和安裝Python以及如何使用EVE-NG搭建網絡拓撲。在本章中,我們將學習如何使用目前常用的網絡自動化庫自動完成各種網絡任務。Python可以在不同的網絡層上與網絡設備進行交互。

首先,Python可以通過套接字編程和socket模塊操縱底層網絡,從而為Python所在的操作系統和網絡設備之間搭建一個低層次的網絡接口。此外,Python模塊還可以通過Telnet、SSH和API與網絡設備進行更高級別的交互。本章將深入探討如何在Python中使用Telnet與SSH模塊在遠程設備上建立連接和執行命令。

本章主要介紹以下內容:

  • 使用Python通過Telnet連接設備;

  • Python和SSH;

  • 使用netaddr處理IP地址和網絡;

  • 網絡自動化實戰示例。

4.1 技術要求

應檢查是否正確安裝了下列工具并保證它們能夠正常使用:

  • Python 2.7.1x;

  • PyCharm社區版或專業版;

  • EVE-NG,網絡仿真器的安裝和配置請參閱第3章。

本章中出現的所有腳本請參見GitHub網站。

4.1.1 Python和SSH

SSH和Telnet的不同之處在于客戶端與服務器之間交換數據的通道不一樣。SSH使用的是安全鏈路,在客戶端和設備之間創建了一個使用不同的安全機制進行加密的隧道,通信內容很難被解密。因此在需要保證網絡安全的時候,網絡工程師會首先選擇使用SSH協議。

Paramiko庫遵循SSH2協議,支持身份驗證,密鑰處理(DSA、RSA、ECDSA和ED25519),以及其他SSH功能(如proxy命令和SFTP)。在Python中當需要使用SSH連接到網絡設備時通常使用這個庫。

4.1.2 Paramiko模塊

Paramiko是Python中應用最廣的SSH模塊。模塊本身使用Python語言編寫和開發,只有像crypto這樣的核心函數才會用到C語言。從其GitHub官方鏈接上能夠看到代碼的貢獻者和模塊歷史等諸多信息。

1.安裝模塊

打開Windows cmd或Linux shell,運行下面的命令,從PyPI下載最新的Paramiko模塊。如下圖所示,同時,該命令會自動下載其他依賴包(如cyrptography、ipaddress和six),并將它們安裝到計算機上。

pip install paramiko

在命令行中輸入Python,然后導入Paramiko模塊,驗證是否安裝成功。如下圖所示,正確安裝之后,能夠成功導入模塊。也就是說,命令行上不會出現任何錯誤提示。

2.用SSH連接網絡設備

如前所述,要使用Paramiko模塊,首先需要在Python腳本中導入它,然后通過繼承SSHClient()來創建SSH客戶端。然后,設置Paramiko的參數,使其能夠自動添加任意未知的主機密鑰并信任與服務器之間的連接。接下來,將遠程主機的信息(IP地址、用戶名和密碼等)傳遞給connect函數。

#!/usr/bin/python
__author__ = "Bassim Aly"
__EMAIL__ = "basim.alyy@gmail.com"

import paramiko
import time
Channel = paramiko.SSHClient()
Channel.set_missing_host_key_policy(paramiko.AutoAddPolicy())
Channel.connect(hostname="10.10.88.112", username='admin',
password='access123', look_for_keys=False,allow_agent=False)

shell = Channel.invoke_shell()

AutoAddPolicy()是一種策略,可以作為函數set_missing_host_key_policy()的輸入參數。在虛擬實驗室環境中推薦使用這種策略,但在生產環境中應當使用更加嚴格的策略,如WarningPolicy()或RejectPolicy()。

最后,invoke_shell()將啟動一個連接到SSH服務器的交互式shell會話。在調用該函數時可以傳入一些其他參數(如終端類型、寬度、高度等)。

Paramiko的連接參數如下。

  • Look_For_Keys:默認為True,強制Paramiko使用密鑰進行身份驗證。也就是說,用戶需要使用私鑰和公鑰對網絡設備進行身份驗證。在這里使用密碼驗證,因此將該參數設置為False。

  • allow_agent:表示是否允許連接到SSH代理,默認為True。在用密鑰驗證時可能需要使用這個選項。由于這里使用的是用戶名/密碼,因此禁用它。

最后一步,把各種命令(如show ip int b和show arp)發送到設備終端,并將返回結果輸出到Python窗口中。

shell.send("enable\n")
shell.send("access123\n")
shell.send("terminal length 0\n")
shell.send("show ip int b\n")
shell.send("show arp \n")
time.sleep(2)
print shell.recv(5000)
Channel.close()

腳本運行結果如下圖所示。

如果需要在遠程設備上執行耗時很長的命令,就要強制Python等待一段時間,直到設備生成輸出并將結果返回給Python,因此最好使用time.sleep()。否則,Python可能得不到正確的輸出結果。

4.1.3 netmiko模塊

netmiko是Paramiko的增強版本,專門面向網絡設備。雖然Paramiko能夠處理與設備的SSH連接并判斷設備類型是服務器、打印機還是網絡設備,但netmiko在設計時針對網絡設備做了優化,能夠更有效地處理SSH連接。netmiko還支持各種不同的設備廠商和平臺。

netmiko也是對Paramiko的封裝,它使用許多其他增強功能擴展了Paramiko,比如使用啟用的密碼直接訪問所支持的設備,從文件讀取配置并將推送到設備,在登錄期間禁用分頁顯示,以及默認在每條命令后面加上回車符"\n"。

1.支持的設備商

netmiko支持許多供應商的設備,并定期在支持列表中添加新的供應商。netmiko支持的供應商列表分為定期測試類、有限測試類和實驗類。在該模塊的GitHub頁面上可以找到這個列表。

定期測試類中支持的供應商如下圖所示。

有限測試類中支持的供應商如下圖所示。

實驗類中支持的供應商如下圖所示。

2.安裝和驗證

安裝netmiko非常簡單。打開Windows命令行窗口或Linux shell,執行下面的命令就可以從PyPI獲取最新版本的netmiko包(見下圖)。

pip install netmiko

然后,在Python shell中導入netmiko,驗證模塊是否正確地安裝到Python site-packages中。

$python
>>>import netmiko

3.使用netmiko建立SSH連接

現在該開始使用netmiko了,讓我們來看看它強大的SSH功能。首先連接到網絡設備并在上面執行命令。默認情況下,netmiko在建立會話(session)的過程中會在后臺處理許多操作(如添加未知的SSH密鑰主機,設置終端類型、寬度和高度),在需要的時候還可以進入特權(enable)模式,然后通過運行供應商提供的命令來禁用分頁。

首先,以字典格式定義設備并提供下列5個必需的關鍵信息。

R1 = (
'device type ': 'cisco ios',
'ip': '10.10.88.110',
'username': 'admin',
'password': 'access123',
'secret': 'access123',
}

第一個參數是device_type,為了執行正確的命令,需要使用這個參數來定義平臺供應商。然后,需要SSH的IP地址。如果已經使用DNS解析了IP地址,該參數可能是主機名;否則,該參數是IP地址。接下來,提供username、password以及以secret參數傳遞的特權模式的密碼。注意,可以使用getpass()模塊隱藏密碼,并且只在腳本執行期間提示它們。

雖然變量中的密鑰序列不重要,但是為了使netmiko能夠正確解析字典并開始和設備建立連接,密鑰的名稱應該和之前示例中提供的密鑰完全一樣。

接下來,從netmiko模塊導入ConnectHandler函數,并提供定義的字典來開始建立連接。因為所有的設備是通過特權模式的密碼配置的,所以需要為創建的連接提供.enable(),以在特權模式下訪問。使用.send_command()在路由器終端上執行命令,.send_command()將會執行命令并通過變量的值顯示設備的輸出。

from netmiko import ConnectHandler
connection = ConnectHandler(**R1)
connection.enable()
output = connection.send_command("show ip int b")
print output

腳本輸出結果如下。

注意,這里看到的輸出結果去掉了命令行中的命令回顯和設備提示符。默認情況下,netmiko會替換設備的返回結果,使輸出更加整潔,替換過程通過正則表達式完成,這部分會在下一章中介紹。

如果不想使用這種方式,而是希望看到命令提示符,并在返回結果的后面執行命令,可以在.send_command()函數中加上以下參數。

output = connection.send_command("show ip int
b",strip_command=False,strip_prompt=False)

strip_command=False和strip_prompt=False告訴netmiko保留而不是替換命令行回顯和提示符。默認情況下它為True,可以根據需要進行設置。

4.使用netmiko配置設備

netmiko可以通過SSH配置遠程設備,通過.config方法進入設備的配置模式,然后按照list格式中的信息(配置列表)配置設備。配置列表可以直接寫在Python腳本中,也可以從文件中讀取,然后用readlines()方法轉換為列表。

from netmiko import ConnectHandler

SW2 = {
'device_type': 'cisco_ios',
'ip': '10.10.88.112',
'username': 'admin',
'password': 'access123',
'secret': 'access123',
}

core_sw_config = ["int range gig0/1 - 2","switchport trunk encapsulation
dot1q",
"switchport mode trunk","switchport trunk allowed vlan
1,2"]

print "########## Connecting to Device {0} ############".format(SW2['ip'])
net_connect = ConnectHandler(**SW2)
net_connect.enable()
print "***** Sending Configuration to Device *****"
net_connect.send_config_set(core_sw_config)

上面的腳本以另外一種形式連接到SW2并進入特權模式。但這次使用的是另一個netmiko方法——send_config_set(),該方法需要使用列表形式的配置文件,同時進入設備的配置模式并根據列表對設備進行配置。這里測試了一個簡單的配置,即修改gig0/1和gig0/2,并將這兩個端口配成trunk模式。在設備上執行show run命令時,如果命令執行成功,會出現類似下面的輸出。

5.netmiko中的異常處理

在設計Python腳本時,我們可能會假設設備已啟動并運行,并且用戶已提供了正確的登錄信息,但實際情況并非總是如此。有時Python和遠程設備之間的網絡連接可能存在問題,或者用戶輸入了錯誤的登錄信息。如果發生這種情況,Python通常會拋出異常并退出,但這種解決方案顯然不夠完美。

netmiko中的異常處理模塊netmiko.ssh_exception提供的一些異常處理類可以處理上面所說的那些情況。第一個類AuthenticationException能夠捕獲遠程設備中的身份驗證錯誤。第二個類NetMikoTimeoutException能夠捕獲netmiko和設備之間的超時或任何連接問題。下面的例子中使用try-except子句包含了ConnectHandler()方法,用來捕獲超時和身份驗證異常。

from netmiko import ConnectHandler
from netmiko.ssh_exception import AuthenticationException,
NetMikoTimeoutException
device = {
'device_type': 'cisco_ios',
'ip': '10.10.88.112',
'username': 'admin',
'password': 'access123',
'secret': 'access123',
}

print "########## Connecting to Device {0}
############".format(device['ip'])
try:
net_connect = ConnectHandler(**device)
net_connect.enable()

print "***** show ip configuration of Device *****"
output = net_connect.send_command("show ip int b")
print output

net_connect.disconnect()

except NetMikoTimeoutException:
print "=========== SOMETHING WRONG HAPPEN WITH {0}
============".format(device['ip'])

except AuthenticationException:
print "========= Authentication Failed with {0}
============".format(device['ip'])

except Exception as unknown_error:
print "============ SOMETHING UNKNOWN HAPPEN WITH {0} ============"

6.設備自動發現

netmiko提供了一種可以“猜測”設備類型和發現設備的機制。通過組合使用SNMP發現OIDS和在遠程控制臺上執行多個show命令這兩種方式,根據輸出字符串檢測路由器的操作系統和類型。然后,netmiko將相應的驅動程序加載到ConnectHandler()類中。

#!/usr/local/bin/python
__author__ = "Bassim Aly"
__EMAIL__ = "basim.alyy@gmail.com"

from netmiko import SSHDetect, Netmiko
device = {
'device_type': 'autodetect',
'host': '10.10.88.110',
'username': 'admin',
'password': "access123",
}

detect_device = SSHDetect(**device)
device_type = detect_device.autodetect()
print(device_type)
print(detect_device.potential_matches)

device['device_type'] = device_type
connection = Netmiko(**device)

在上面的腳本中,應注意以下幾點。

首先,設備字典中的device_type等于autodetect,也就是告訴netmiko在檢測到設備類型之前不要加載驅動程序。

然后,使用netmiko的SSHDetect()類發現設備。它使用SSH連接到設備,并執行一些命令以找出操作系統的類型,結果以字典形式返回。

接著,使用autodetect()函數將匹配度最高的結果賦給device_type變量。

接下來,輸出potential_matches,查看字典內的全部返回結果。

最后,可以更新設備字典并為其分配新的device_type。

4.2 在Python中使用Telnet協議

Telnet是TCP/IP協議棧中最早可用的協議之一,主要用來在服務器和客戶端之間建立連接、交換數據。服務器端監聽TCP端口23,等待客戶端的連接請求。

在下面的例子中,我們將創建一個Python腳本作為Telnet客戶端,拓撲中的其他路由器和交換機則作為Telnet服務器。Python原生的telnetlib庫已經支持Telnet,所以不需要另外安裝。

客戶端對象可以通過telnetlib模塊中的Telnet()類實例化創建。通過這個對象,我們能夠使用telnetlib中的兩個重要函數——read_until()(用于讀取輸出結果)和write()(用于向遠程設備寫入內容)。這兩個函數用來和Telnet連接交互,從Telnet連接讀取或向Telnet連接寫入數據。

還有一點非常關鍵,使用read_until()讀取Telnet連接的內容之后緩沖區會被清空,無法再次讀取。因此,如果在后面的處理中還會用到之前讀取的重要數據,需要在腳本里將其另存為變量。

Telnet數據以明文形式發送,因此通過“中間人攻擊”可以捕獲并查看到Telnet數據,如用戶信息和密碼。即便如此,一些服務提供商和企業仍然在使用它,只是他們會集成VPN和radius/tacacs協議,以提供輕量級和安全的訪問方式。

讓我們一步步分析這個腳本。

(1)在Python腳本中導入telnetlib模塊,在變量中定義用戶名和密碼。代碼如下。

import telnetlib
username = "admin"
password = "access123"
enable_password = "access123"

(2)定義一個變量,用來和遠程主機建立連接。注意,只需要提供遠程主機的IP地址,不用在連接建立過程中提供用戶名或密碼。

cnx = telnetlib.Telnet(host="10.10.88.110") #here we're telnet to
Gateway

(3)通過讀取Telnet連接返回的輸出并搜索“Username:”關鍵字來提供Telnet連接的用戶名。然后寫入管理員用戶名。如果需要,用同樣的方法輸入Telnet密碼。

cnx.read_until("Username:")
cnx.write(username + "\n")
cnx.read_until("Password:")
cnx.write(password + "\n")
cnx.read_until(">")
cnx.write("en" + "\n")
cnx.read_until("Password:")
cnx.write(enable_password + "\n")

Telnet連接建好之后,在腳本中加上控制臺提示符非常重要;否則,連接將陷入死循環。接著Python腳本就會超時并出現錯誤。

(4)向Telnet連接寫入show ip interface brief命令并開始讀取返回內容,直到出現路由器提示符(#)為止。通過以下命令可以得到路由器的接口配置。

cnx.read_until("#")
cnx.write("show ip int b" + "\n")
output = cnx.read_until("#")
print output

完整的腳本如下所示。

腳本運行結果如下所示。

注意,在輸出中包含了執行的命令show ip int b,并且在stdout中輸出和返回了路由器提示符"R1#"。可以使用內置的字符串函數(如replace())從輸出中清除它們。

cleaned_output = output.replace("show ip int b","").replace("R1#","")
print cleaned_output

你可能已經注意到腳本中使用了密碼并將密碼以明文形式寫下來,這樣做顯然是不安全的。同時,在Python腳本中使用硬編碼也不是好習慣。在下一節中,我們將學習如何隱藏密碼并設計一種機制,從而在腳本運行時要求用戶輸入密碼。

此外,如果要執行那些輸出結果可能跨越多個頁面的命令(如show running config),則需要在連接到設備之后和發送命令之前,先通過發送termindl length 0來禁用分頁。

使用telnetlib推送配置

在上一節中,我們通過執行show ip int brief簡單介紹了telnetlib的操作過程。現在我們要用telnetlib將VLAN配置推送到實驗室網絡拓撲中的4臺交換機。使用Python的range()函數創建一個VLAN列表,遍歷列表將VLAN ID推送到當前交換機。注意,我們將交換機的IP地址放到了另一個列表中,使用外部for循環來遍歷這個列表。同時使用內置模塊getpass隱藏控制臺中的密碼,在腳本運行時提示用戶輸入密碼。

#!/usr/bin/python
import telnetlib
import getpass
import time

switch_ips = ["10.10.88.111", "10.10.88.112", "10.10.88.113",
"10.10.88.114"]
username = raw_input("Please Enter your username:")
password = getpass.getpass("Please Enter your Password:")
enable_password = getpass.getpass("Please Enter your Enable Password:")

for sw_ip in switch_ips:
print "\n#################### Working on Device " + sw_ip + "
####################"
connection = telnetlib.Telnet(host=sw_ip.strip())
connection.read_until("Username:")
connection.write(username + "\n")
connection.read_until("Password:")
connection.write(password + "\n")
connection.read_until(">")
connection.write("enable" + "\n")
connection.read_until("Password:")
connection.write(enable_password + "\n")
connection.read_until("#")
connection.write("config terminal" + "\n") # now i'm in config mode
vlans = range(300,400)
for vlan_id in vlans:
print "\n********* Adding VLAN " + str(vlan_id) + "**********"
connection.read_until("#")
connection.write("vlan " + str(vlan_id) + "\n")
time.sleep(1)
connection.write("exit" + "\n")
connection.read_until("#")
connection.close()

最外層的for循環用來遍歷設備列表,然后在每次循環(每個設備)中生成范圍為300~400的VLAN ID并將它們推送到當前設備。

腳本運行結果如下。

當然,也可以通過交換機控制臺檢查運行結果(僅顯示部分結果)。

4.3 使用netaddr處理IP地址和網絡

管理和操作IP地址是網絡工程師最重要的任務之一。Python開發人員提供了一個令人驚嘆的庫—— netaddr,它可以識別IP地址并對其進行處理。假設你開發了一個應用程序,其中需要獲取129.183.1.55/21的網絡地址和廣播地址,通過模塊內的內置方法network和broadcast可以輕松地獲取到相應的地址。

net.network
129.183.0.
net.broadcast
129.183.0.0

netaddr支持很多功能。

在第3層的地址中,netaddr支持下列功能。

  • 識別IPv4和IPv6地址、子網、掩碼和前綴。

  • 對IP網絡進行迭代、切片、排序、匯總和分類。

  • 處理各種格式(CIDR、任意子網長度、nmap)。

  • 對IP地址和子網進行集合操作(聯合、交叉等)。

  • 解析各種不同的格式和符號。

  • 查找IANA IP塊信息。

  • 生成DNS反向查找結果。

  • 檢索超網和生成子網。

在第2層的地址中,netaddr支持下列功能。

  • 展示和操作Mac地址與EUI-64標識符。

  • 查找IEEE組織信息(OUI、IAB)。

  • 生成鏈路本地的IPv6地址。

4.3.1 安裝netaddr

使用pip安裝netaddr模塊,命令如下。

pip install netaddr

安裝完成之后打開PyCharm或Python控制臺并導入模塊,驗證模塊是否安裝成功。如果沒有出現錯誤信息,說明模塊安裝成功。

python
>>>import netaddr

4.3.2 使用netaddr的方法

netaddr模塊提供了兩種重要的方法來定義IP地址并對其進行處理。第一種方法是IPAddress(),它用來定義具有默認子網掩碼的單個有類IP地址。第二種方法是IPNetwork(),它使用CIDR定義無類IP地址。

兩種方法都將IP地址作為字符串來處理,根據字符串返回IP地址或IP網絡對象。返回的對象還可以繼續執行許多方法,比如判斷IP地址是單播地址、多播地址、環回地址、私有地址還是公有地址,以及地址有效還是無效地址。這些操作的結果是True或False。在Python的if條件中可以直接使用這些方法。

另外,該模塊支持使用==、<和>等比較運算符比較兩個 IP 地址,從而生成子網。它還可以檢索一個給定IP地址或者子網術語的超網列表。最終,netaddr模塊可以生成有效主機的一個完整列表(不包括網絡IP地址和網絡廣播地址)。

#!/usr/bin/python
__author__ = "Bassim Aly"
__EMAIL__ = "basim.alyy@gmail.com"
from netaddr import IPNetwork,IPAddress
def check_ip_address(ipaddr):
ip_attributes = []
ipaddress = IPAddress(ipaddr)

if ipaddress.is_private():
ip_attributes.append("IP Address is Private")
else:
ip_attributes.append("IP Address is public")
if ipaddress.is_unicast():
ip_attributes.append("IP Address is unicast")
elif ipaddress.is_multicast():
ip_attributes.append("IP Address is multicast")
if ipaddress.is_loopback():
ip_attributes.append("IP Address is loopback")

return "\n".join(ip_attributes)

def operate_on_ip_network(ipnet):

net_attributes = []
net = IPNetwork(ipnet)
net_attributes.append("Network IP Address is " + str(net.network) + "
and Netowrk Mask is " + str(net.netmask))

net_attributes.append("The Broadcast is " + str(net.broadcast) )
net_attributes.append("IP Version is " + str(net.version) )
net_attributes.append("Information known about this network is " +
str(net.info) )
net_attributes.append("The IPv6 representation is " + str(net.ipv6()))
net_attributes.append("The Network size is " + str(net.size))
net_attributes.append("Generating a list of ip addresses inside the
subnet")

for ip in net:
net_attributes.append("\t" + str(ip))
return "\n".join(net_attributes)

ipaddr = raw_input("Please Enter the IP Address: ")
print check_ip_address(ipaddr)

ipnet = raw_input("Please Enter the IP Network: ")
print operate_on_ip_network(ipnet)

在上面的腳本中,首先使用raw_input()函數請求用戶輸入IP地址和IP網絡,然后將輸入的值作為參數傳遞給兩個用戶方法check_ip_address()和operate_on_ip_network()并調用它們。第一個函數check_ip_address()會檢查輸入的IP地址,同時嘗試生成有關IP地址屬性的報告(例如,IP地址是單播、多播、私有還是環回地址),并將輸出返回給用戶。

第二個函數operate_on_ip_network()用來完成和網絡相關的操作,即生成網絡ID、掩碼、廣播、版本、網絡上的已知信息、IPv6地址的顯示方式,最后生成該子網內的所有IP地址。

注意,net.info只能對公共IP地址生成可用信息,對私有IP地址不起作用。

同樣,在使用之前需要先從netaddr模塊導入IP Network和IP Address。

腳本運行結果如下所示。

4.4 簡單的用例

隨著網絡變得越來越大,其中包含更多來自各種不同供應商的設備,這就需要創建模塊化的Python腳本來自動執行各種任務。接下來的幾節將分析3個用例,這些用例可以從網絡中收集不同信息,縮短解決問題所需的時間,或者至少將網絡配置恢復到其上次已知的良好狀態。使用自動化工作流來處理網絡故障、修復網絡環境,網絡工程師能夠更關心工作完成情況,提高業務水平。

4.4.1 備份設備配置

備份設備配置對于任何一名網絡工程師來說都是最重要的任務之一。在這個用例中,我們將使用netmiko庫設計一個示例Python腳本。該腳本用來備份設備配置,它適用于不同的供應商和平臺。

為方便日后訪問或引用,我們將根據設備IP地址格式化輸出文件名,例如,SW1備份操作的輸出文件保存在dev_10.10.88.111_.cfg中。

創建Python腳本

從定義交換機開始,我們希望將其配置備份為文本文件(設備文件),用逗號分隔訪問設備的用戶名、密碼等詳細信息。這樣就可以在Python腳本中使用split()函數來獲取這些數據,方便在ConnectHandler函數中使用這些數據。此外,還可以從Microsoft Excel工作表或任何數據庫中輕松導出該文件以及把該文件導入其中。

文件結構如下。

<device_ipaddress>,<username>,<password>,<enable_password>,<vendor>

創建Python腳本,使用with open子句在腳本中導入該文件。在導入的文件對象上使用readlines()方法將文件中的每一行組成列表,然后用for循環逐行遍歷文件,用split()函數獲取每一行中用逗號隔開的設備信息,并將它們賦予相應的變量。

from netmiko import ConnectHandler
from datetime import datetime

with
open("/media/bassim/DATA/GoogleDrive/Packt/EnterpriseAutomationProject/Chap
ter5_Using_Python_to_manage_network_devices/UC1_devices.txt") as
devices_file:
devices = devices_file.readlines()
for line in devices:
line = line.strip("\n")
ipaddr = line.split(",")[0]
username = line.split(",")[1]
password = line.split(",")[2]
enable_password = line.split(",")[3]

vendor = line.split(",")[4]

if vendor.lower() == "cisco":
device_type = "cisco_ios"
backup_command = "show running-config"

elif vendor.lower() == "juniper":
device_type = "juniper"
backup_command = "show configuration | display set"

由于我們的目標是創建模塊化的、支持多種設備供應商的腳本,因此在if子句中需要檢查設備供應商,并為該設備分配正確的device_type和backup_command。

接下來,建立與設備的SSH連接,使用netmiko模塊中的.send_command()方法執行備份命令。

print str(datetime.now()) + " Connecting to device {}" .format(ipaddr)

net_connect = ConnectHandler(device_type=device_type,
ip=ipaddr,
username=username,
password=password,
secret=enable_password)
net_connect.enable()
running_config = net_connect.send_command(backup_command)

print str(datetime.now()) + " Saving config from device {}" .format(ipaddr)

f = open( "dev_" + ipaddr + "_.cfg", "w")
f.write(running_config)
f.close()
print "=============================================="

在最后的幾行中,以寫入方式打開一個文件(文件不存在時將自動創建),文件名中包含了前面從設備文件中讀取的ipaddr變量。

腳本運行結果如下。

需要注意的是,備份的配置文件存儲在項目的主目錄中,文件名稱包含每個設備的IP地址(見下圖)。

使用Linux服務器上的cron任務,或Windows服務器上的計劃任務,可讓服務器在指定時間運行上面的Python腳本。例如,每天凌晨運行一次,將配置信息存儲在latest目錄中,以方便運維團隊使用。

4.4.2 創建訪問終端

在Python或其他編程活動中,你就是自己的設備供應商。為了滿足自己的需求,你可以創建任何喜歡的代碼組合和程序。在第二個例子中我們創建自己的終端(terminal),通過telnetlib訪問路由器。只需要在終端寫幾個單詞,就會在網絡設備中執行很多命令并返回輸出結果。輸出結果將會顯示在標準輸出或保存在文件中。

#!/usr/bin/python
__author__ = "Bassim Aly"
__EMAIL__ = "basim.alyy@gmail.com"

import telnetlib

connection = telnetlib.Telnet(host="10.10.88.110")
connection.read_until("Username:")
connection.write("admin" + "\n")
connection.read_until("Password:")
connection.write("access123" + "\n")
connection.read_until(">")
connection.write("en" + "\n")
connection.read_until("Password:")
connection.write("access123" + "\n")
connection.read_until("#")
connection.write("terminal length 0" + "\n")
connection.read_until("#")
while True:
command = raw_input("#:")
if "health" in command.lower():
commands = ["show ip int b",
"show ip route",
"show clock",
"show banner motd"
]

elif "discover" in command.lower():
commands = ["show arp",
"show version | i uptime",
"show inventory",
]
else:
commands = [command]
for cmd in commands:
connection.write(cmd + "\n")
output = connection.read_until("#")
print output
print "==================="

首先,建立到路由器的Telnet連接并輸入相應的用戶信息,一直到打開特權(enable)模式。然后,創建一個始終為true的無限while循環,使用內置的raw_input()函數捕捉用戶輸入的命令。腳本捕獲到用戶輸入之后,在網絡設備上執行這些命令。

如果用戶輸入關鍵字health或discover,終端將自動執行一系列命令以反映期望的操作。這些關鍵字在排除網絡故障時非常有用,可以根據常用的操作自由擴展它們。想象一下,在需要解決兩個路由器之間的開放式最短路徑優先(Open Shortest Path First,OSPF)鄰居問題時,只要打開自己的Python終端腳本(這個腳本中已經寫好了幾個排除故障常用的命令),并將這些命令打包到諸如tshoot_ospf之類的if條件之后。一旦腳本看到這個關鍵字,它就會執行這些命令,輸出OSPF鄰居狀態、MTU的接口、OSPF的廣播網絡等,簡化定位問題的過程。

通過在提示符中輸入health嘗試腳本中的第一條命令。腳本輸出結果如下。

可以看到,腳本將返回在設備上執行多條命令后的結果。

接著試一下第二個命令discover。腳本輸出結果如下。

這次腳本返回discover命令的輸出。在后面的章節中,我們將會解析返回的輸出結果并從中提取有用的信息。

4.4.3 從Excel工作表中讀取數據

網絡和IT工程師始終使用Excel工作表來存儲基礎設施的相關信息,如IP地址、設備供應商和登錄憑證。Python支持從Excel工作表中讀取數據并對其進行處理,以便我們在腳本中使用數據。

在這個用例中,我們將使用Excel Read(xlrd)模塊讀取UC3_devices.xlsx文件。該文件保存了基礎設施的主機名、IP地址、用戶名、普通密碼、特權模式下的密碼和供應商名稱。然后將讀到的數據用作netmiko模塊的輸入。

Excel工作表中的內容如下圖所示。

首先,用pip安裝xlrd模塊,因為需要用它來讀取Microsoft Excel工作表。

pip install xlrd

xlrd模塊能夠讀取Excel工作表并將行和列轉換為矩陣。比如,row[0][0]代表第一行第一列的單元格,右邊緊接著它的單元格是row[0][1](見下圖),以此類推。

xlrd在讀取工作表時,每次讀取一行,同時特殊計數器nrows(行數)自動加1。同樣,每次讀取一列,ncols(列數)自動加1,這樣我們就能夠通過這兩個參數知道矩陣的大小。

然后,在xlrd的open_workbook()函數中輸入文件路徑,并用sheet_by_index()或sheet_by_name()函數訪問工作表。在本例中,數據存儲在第一個工作表(index = 0)中,工作表文件存儲在以章為名的文件夾下。接著,遍歷工作表的每一行,或者使用row()函數來訪問指定行。返回的輸出結果是一個列表,使用索引可以訪問列表中的元素。

Python腳本如下。

__author__ = "Bassim Aly"
__EMAIL__ = "basim.alyy@gmail.com"

from netmiko import ConnectHandler
from netmiko.ssh_exception import AuthenticationException,
NetMikoTimeoutException
import xlrd
from pprint import pprint

workbook =
xlrd.open_workbook(r"/media/bassim/DATA/GoogleDrive/Packt/EnterpriseAutomat
ionProject/Chapter4_Using_Python_to_manage_network_devices/UC3_devices.xlsx
")

sheet = workbook.sheet_by_index(0)

for index in range(1, sheet.nrows):
hostname = sheet.row(index)[0].value
ipaddr = sheet.row(index)[1].value
username = sheet.row(index)[2].value
password = sheet.row(index)[3].value
enable_password = sheet.row(index)[4].value
vendor = sheet.row(index)[5].value

device = {
'device_type': vendor,
'ip': ipaddr,
'username': username,
'password': password,
'secret': enable_password,

}
# pprint(device)

print "########## Connecting to Device {0}
############".format(device['ip'])
try:
net_connect = ConnectHandler(**device)
net_connect.enable()

print "***** show ip configuration of Device *****"
output = net_connect.send_command("show ip int b")
print output

net_connect.disconnect()

except NetMikoTimeoutException:
print "=======SOMETHING WRONG HAPPEN WITH
{0}=======".format(device['ip'])

except AuthenticationException:
print "=======Authentication Failed with
{0}=======".format(device['ip'])
except Exception as unknown_error:
print "=======SOMETHING UNKNOWN HAPPEN WITH {0}======="

4.4.4 其他用例

使用netmiko可以實現很多網絡自動化用例。例如,在升級期間從遠程設備上傳/下載文件,利用Jinja2模板加載配置,訪問終端服務器,訪問終端設備等。要了解更多用例,請參見GitHub官網(見下圖)。

4.5 小結

在本章中,我們開始使用Python進入網絡自動化世界。本章討論了Python中的一些工具,通過Telnet和SSH建立到遠程節點的連接,并在遠程設備上執行命令。此外,本章還講述了如何在netaddr模塊的幫助下處理IP地址和網絡子網。最后通過兩個實際用例鞏固了這些知識。

本文摘自:《Python自動化運維實戰》

  • 運維工程師教程書籍,自動化運維實踐

  • 通過Python模塊、庫與工具自動配置和管理大量服務器的講解,提高運維的效率

《Python自動化運維實戰》介紹了如何通過Python來自動完成服務器的配置與管理,自動完成系統的管理任務(如用戶管理、數據庫管理和進程管理),以及完成這些工作所需的模塊、庫和工具。此外,本書還講述了如何使用Python腳本自動執行測試,如何通過Python在云基礎設施和虛擬機上自動執行任務,如何使用基于Python的安全工具自動完成與安全相關的任務。

本書適合運維人員和開發人員閱讀,也可作為相關專業人士的參考書。

圖片和內容源自網絡分享,若有侵權,請聯系刪除!

上海艾磊科技有限公司專門為企業提供IT咨詢,IT外包,系統集成,以及各類IT增值服務。其中增值服務包括OFFICE 365云服務,鼎捷企業ERP管理軟件,云備份,企業郵箱,無線覆蓋,上網行為管理,VPN架設,網絡安全服務,INTERNET接入,設備租賃, IP電話服務

總結

以上是生活随笔為你收集整理的python paramiko模块下载_Python自动化运维实战:使用Python管理网络设备的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

成人精品一区二区三区电影免费 | 97成人在线视频 | 亚洲国产69| 五月婷婷开心中文字幕 | 婷婷成人在线 | 亚洲在线激情 | 天天激情天天干 | 久草在线资源观看 | 国产精品男女视频 | 国产精品久久久久久久婷婷 | 2017狠狠干| 亚洲精品在线免费播放 | 九九九九精品 | 亚洲精品在线视频播放 | 久久久这里有精品 | 久久久久久久精 | 91天堂素人约啪 | 国产精品免费观看国产网曝瓜 | 国产精品6999成人免费视频 | av网站免费看 | 欧美一区二区三区在线看 | 国产中文字幕一区 | 成人高清在线观看 | 欧美福利网址 | 国产一区二区在线播放 | 国内精品久久天天躁人人爽 | 天天摸天天操天天舔 | 欧美一级片在线免费观看 | 超碰在线最新地址 | 国产美女免费视频 | 色婷婷久久久综合中文字幕 | 日韩在线观看一区二区三区 | 日韩免费观看一区二区 | 激情丁香综合 | 国产午夜在线观看 | 欧美一级日韩免费不卡 | 欧美成人精品在线 | 成人黄色在线观看视频 | 欧美日韩精品久久久 | 在线观看的黄色 | 欧美日韩一区二区三区免费视频 | 欧美精品日韩 | 日日夜夜综合网 | 日日躁你夜夜躁你av蜜 | 丝袜美腿在线视频 | 探花视频在线观看 | 1区2区3区在线观看 三级动图 | 超碰电影在线观看 | 97免费| 亚洲 欧美 另类人妖 | 国产成人精品在线观看 | 特级毛片爽www免费版 | 亚洲精品免费观看视频 | 一区二区精品视频 | 久久dvd| 人人添人人澡人人澡人人人爽 | 国产精品久久久久毛片大屁完整版 | 一区二区三区视频 | 精品成人久久 | 美女国产免费 | 日韩最新在线 | 免费看污黄网站 | 中文字幕中文中文字幕 | 7777精品伊人久久久大香线蕉 | 97超碰人人看 | av 一区二区三区 | 亚洲理论在线观看电影 | 久久久亚洲麻豆日韩精品一区三区 | 97国产在线播放 | 九九欧美 | 国产成人黄色片 | 亚洲涩综合 | 91麻豆精品国产91久久久久久久久 | 中文字幕免费久久 | 精品国产乱码久久久久久天美 | 丰满少妇在线观看 | 一区二区不卡在线观看 | 人人爽人人干 | 国产精品久久一卡二卡 | 97人人超碰在线 | 欧美日韩精品在线观看视频 | 国产成人精品久久二区二区 | 免费看成年人 | 婷婷av综合 | 成年人在线免费视频观看 | 最近免费观看的电影完整版 | 国产亚洲精品久久久久久大师 | 日韩精品免费一区二区在线观看 | 亚洲精选在线 | 国产无套一区二区三区久久 | 在线看不卡av | www.日日日.com| 99精品一区二区三区 | www麻豆视频| 色婷婷综合久久久 | 97视频在线观看成人 | 日韩视频图片 | 国产在线久草 | 色综合天天在线 | 亚洲视频999 | 国产精品无 | 天天操天天色综合 | 九九热视频在线免费观看 | 精品国产1区 | 天天操天天干天天干 | 精品国产伦一区二区三区观看说明 | 99久e精品热线免费 99国产精品久久久久久久久久 | h视频日本| 久久久伦理 | 青青河边草免费 | 国产综合精品一区二区三区 | 国内精品久久久久久久久久久 | 婷婷丁香激情五月 | 久久99久久久久久 | 综合网中文字幕 | 午夜精品剧场 | 国产资源免费 | 手机成人免费视频 | 91色一区二区三区 | 天天干夜夜夜操天 | 在线播放视频一区 | 国产精品成人品 | 亚洲精品国产精品国自产 | 久久国产精品免费一区 | 91精品视频在线 | 亚洲一区二区三区精品在线观看 | 91九色在线观看视频 | 国产精品一区二区三区在线播放 | 91精品久久久久久综合五月天 | 欧美在线视频免费 | 99精品视频在线观看视频 | 欧洲成人av | 综合激情av| 一级淫片在线观看 | 不卡视频在线看 | 久久久久久久久久久成人 | 国产一级二级av | 四虎国产精 | 久久99国产精品自在自在app | 久久综合中文字幕 | 日韩在线视频播放 | 国产欧美中文字幕 | 久草视频免费在线播放 | 国产在线观看你懂得 | 亚洲视频分类 | 99精品在这里 | 综合色站 | 成人在线免费看视频 | 久久国产精品视频观看 | 毛片无卡免费无播放器 | 日韩精品一区二区三区中文字幕 | 综合色综合色 | 欧美一级高清片 | 啪啪免费观看网站 | 亚洲精区二区三区四区麻豆 | 国产另类xxxxhd高清 | 欧美日韩在线视频观看 | 超碰夜夜| 日本一区二区三区免费观看 | a视频在线 | 亚洲播放一区 | 日韩动态视频 | 成人在线视频你懂的 | 免费黄色网止 | 一区二区 不卡 | 亚洲精品在| 国产中文字幕91 | 久久久香蕉视频 | 国产a级片免费观看 | 91日韩国产| 免费色视频在线 | a级国产乱理伦片在线播放 久久久久国产精品一区 | 日本久久99| 国内精品在线一区 | 在线观看色网站 | 国产精品日韩欧美一区二区 | 日韩区在线观看 | 国产不卡免费视频 | 日韩精品免费在线观看 | 日韩在线视 | 午夜精品一区二区三区视频免费看 | 97超碰人人网 | 91在线影院 | 亚洲一级影院 | 999电影免费在线观看 | 国产精品久久久久久超碰 | 国产色一区| 久久久国产精品免费 | 在线电影91 | a在线观看免费视频 | 99久久精品国产一区二区成人 | 亚洲激情电影在线 | 亚洲一级特黄 | 成人国产精品电影 | 91亚洲影院| 美女黄久久 | 91黄色小网站 | 亚洲国产中文字幕在线观看 | 午夜av在线电影 | 美女性爽视频国产免费app | 久久艹精品| 亚洲精品在线视频播放 | 亚洲欧美日韩精品久久久 | 免费看黄视频 | av电影免费在线看 | 超碰在线公开 | 成人丝袜 | 五月色综合 | 亚洲永久精品一区 | 国产精品久久久久久久av电影 | 久产久精国产品 | 国产免费一区二区三区网站免费 | 麻豆视频91 | 色婷婷成人网 | 国产精品不卡在线观看 | 日韩精品一区二区三区外面 | 日韩高清dvd | 亚洲自拍自偷 | 色综合久久久 | 综合网天天射 | 午夜精品久久一牛影视 | 99在线观看免费视频精品观看 | 国产精品久久久久久久午夜 | 日日天天干 | 欧美精品中文在线免费观看 | 一区电影 | zzijzzij亚洲成熟少妇 | 久久婷婷视频 | www成人av| 2000xxx影视 | 久久激情小视频 | 人人澡人人爽 | 国产免费久久久久 | 久久国产精品精品国产色婷婷 | 成人h电影在线观看 | 国产精品一区二区免费看 | 欧美精品一区在线发布 | 久久久综合九色合综国产精品 | 亚洲欧洲国产精品 | 欧美aaa大片| 国产精品专区一 | www.com黄| 久久久久久毛片精品免费不卡 | www.97视频| 成人黄色小说视频 | 欧美中文字幕久久 | 久久久久电影 | 天天爽夜夜操 | 亚洲综合色av | 成人免费精品 | 国产精品美女久久久久久久 | 日韩精品中字 | 国产在线2020| 久久综合九色综合97婷婷女人 | 欧美aⅴ在线观看 | 国产九色91 | 国产精品自产拍在线观看 | 碰碰影院 | 日韩免费网站 | 91一区二区三区久久久久国产乱 | 色综合久久88色综合天天免费 | 中文字幕成人网 | 少妇超碰在线 | 在线亚洲人成电影网站色www | 五月婷婷天堂 | 午夜成人影视 | 国产色视频网站2 | 日韩免费在线观看视频 | 日韩一区二区免费在线观看 | 国产男女爽爽爽免费视频 | 国产日韩欧美视频 | 在线91观看| 综合网欧美 | 免费亚洲精品视频 | 在线观看视频一区二区三区 | 久久久噜噜噜久久久 | 国产中文字幕亚洲 | a国产精品 | 91人人人| 亚洲精品美女在线观看 | 三级在线视频播放 | 999久久久久久久久6666 | 久久99国产精品久久99 | 国产精品入口a级 | 国产精品成人av在线 | 成人在线观看你懂的 | 亚洲精品国产精品国自产在线 | 91精品国产九九九久久久亚洲 | 成人小视频在线免费观看 | 免费久久久久久 | 一区 二区 精品 | 精品亚洲va在线va天堂资源站 | 韩国av免费在线观看 | 在线a亚洲视频播放在线观看 | 久久精品成人热国产成 | 亚洲精品视频二区 | 精品一区 精品二区 | 97超碰人人 | 久久综合成人网 | 四虎永久免费 | 在线亚洲人成电影网站色www | 色a网 | 久久久久久美女 | 久草视频资源 | 亚洲在线网址 | 亚洲综合爱 | 网站在线观看你们懂的 | 午夜精品久久久99热福利 | 国产理论影院 | 亚洲理论影院 | 久久影视一区二区 | 国内视频在线 | 在线视频 你懂得 | 999成人网 | 国产成在线观看免费视频 | 欧洲色吧| 最新中文字幕在线观看视频 | 久久久久免费 | 国产成人av一区二区三区在线观看 | 麻豆一区二区三区视频 | 国产成人久久av977小说 | 91在线视频 | 久久久鲁 | 97看片网 | 免费在线观看av不卡 | 麻豆成人精品视频 | 欧美在线视频一区二区三区 | 国产黄色一级片在线 | 亚洲精品国偷拍自产在线观看蜜桃 | 久久精品中文 | 欧美一级片在线免费观看 | 欧美精品久久久久久久久老牛影院 | 国产电影黄色av | 黄污视频网站大全 | 一区二区伦理 | 99精品视频在线观看免费 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 久久久影片 | 天天综合导航 | 亚洲国产网站 | 亚洲一区二区视频 | 日韩久久片 | 香蕉网址 | 中文国产成人精品久久一 | 91精品久久久久久综合五月天 | 99久久精品免费 | 夜色资源网 | www.五月天婷婷.com | 久久久免费电影 | 久草在| 九九九九热精品免费视频点播观看 | 麻豆传媒视频在线免费观看 | 日日夜精品 | 日韩精品中文字幕在线不卡尤物 | 天天曰夜夜操 | 91精品成人久久 | 免费在线精品视频 | 色网免费观看 | 麻豆传媒视频在线 | 久久综合毛片 | 久章操| 天天玩天天干天天操 | 国产麻豆精品久久一二三 | 99精品在线视频观看 | 国产精品黑丝在线观看 | 国精产品满18岁在线 | 日韩在线观看av | 岛国av在线免费 | 国产免费成人 | 国产人免费人成免费视频 | 成人激情开心网 | 亚洲精品xxxx | www.天天色 | 国产精品久久久久一区二区三区共 | 伊人亚洲综合网 | 99视频偷窥在线精品国自产拍 | 久久久麻豆精品一区二区 | 免费福利视频网站 | 日韩久久久 | 日韩欧美xx | 夜添久久精品亚洲国产精品 | 色七七亚洲影院 | 欧美色综合久久 | 99精品视频在线播放免费 | 91手机视频| 久久激情影院 | 国产91在| 日韩中文字幕在线看 | 99婷婷狠狠成为人免费视频 | 伊人天堂av| 国产精品亚洲视频 | 丁香九月激情综合 | 亚洲精品乱码久久久久久写真 | 国产黄色免费观看 | 亚洲人成人天堂h久久 | 天天干天天摸 | 欧美国产在线看 | 国产视频在线观看一区二区 | 91亚色视频 | 五月天久久婷婷 | 亚洲涩综合 | 综合久久一本 | 久久久综合精品 | 国内精品久久久久国产 | 91手机电视 | 99久久99久久免费精品蜜臀 | 97在线播放 | 超碰在线日韩 | 欧洲激情在线 | 国产男男gay做爰 | 亚洲无吗av| 欧美日韩国产伦理 | 精品在线你懂的 | 午夜的福利 | 色视频国产直接看 | 欧美激情视频免费看 | 91av蜜桃| 色狠狠综合天天综合综合 | 亚洲网站在线看 | 日韩在线观看免费 | www.久久久久 | 久久免费精彩视频 | 婷婷草 | av成人在线电影 | 在线观看免费视频你懂的 | av片子在线观看 | 久久99久久99免费视频 | 亚洲天天摸日日摸天天欢 | 日日夜色| adc在线观看 | 五月天色综合 | 久久久久久国产精品久久 | 久久在线精品视频 | 91探花国产综合在线精品 | 日韩欧美视频在线播放 | 97福利| 国产精品久久99精品毛片三a | av福利电影| 国产一级二级在线观看 | 亚洲一区久久久 | 久草网在线视频 | 日韩高清观看 | 国产69精品久久99不卡的观看体验 | 国产一级二级视频 | 97精品一区二区三区 | 又黄又爽又无遮挡免费的网站 | 国产小视频在线播放 | 久久免费看毛片 | 99精品国产99久久久久久福利 | 五月天色网站 | 国产视频精品在线 | 精品国内自产拍在线观看视频 | 国产一区在线精品 | 在线视频中文字幕一区 | 伊人久久五月天 | 国产一区二区在线免费视频 | 91爱爱电影 | 草免费视频 | 九九在线精品视频 | 日韩av电影中文字幕在线观看 | www.888av| 91亚洲国产成人 | 国产精品久久久久av免费 | 蜜臀av夜夜澡人人爽人人桃色 | 中文字幕国产在线 | 亚洲精品高清在线 | 人人爱人人做人人爽 | 中文字幕在线观看第三页 | 2000xxx影视 | 国产真实精品久久二三区 | 天天干 夜夜操 | 在线观看色网站 | 久久免费视频这里只有精品 | 99re6热在线精品视频 | 久福利| 人人狠狠综合久久亚洲婷 | 久久激情五月丁香伊人 | 久草爱 | 99在线观看精品 | 亚洲精品国产自产拍在线观看 | 日韩理论片中文字幕 | 欧美综合在线视频 | 国产精品18久久久久久久 | 日韩一区二区三 | 国产精品嫩草55av | 久久久久国产一区二区三区 | 免费成人在线网站 | 97碰在线视频 | 美女视频黄免费网站 | 伊人天天狠天天添日日拍 | 国产视频久久久久 | 黄在线免费观看 | 亚洲视频 视频在线 | 亚洲永久精品视频 | 欧美成人影音 | 一区二区欧美在线观看 | 免费观看的av | 亚洲乱码一区 | 亚洲国产片色 | 韩国av免费观看 | 激情影院在线观看 | 亚洲专区 国产精品 | 色99视频| 日韩激情视频在线 | 9999毛片 | 欧美综合在线观看 | 欧美电影黄色 | 国产精品日韩精品 | 不卡在线一区 | 精品av网站 | 国产在线观看99 | 精品视频成人 | 一区二区三区 亚洲 | 久久影院精品 | 99国产精品免费网站 | 在线免费观看的av | 天天操天天干天天操天天干 | 在线观看亚洲 | 免费av电影网站 | 欧美亚洲xxx | 天天舔天天射天天操 | 免费在线播放视频 | 国产一级大片免费看 | 最近中文字幕大全 | 久久夜av | 波多野结衣在线中文字幕 | 中文字幕在线观看第三页 | 国产免费黄视频在线观看 | 日韩专区在线播放 | 一区二区精品国产 | 久久午夜色播影院免费高清 | 国产精品久久久久久久久搜平片 | 亚洲国产精品成人综合 | 久久精品毛片 | www.久久成人 | 国产在线观看91 | 亚洲国产高清在线观看视频 | 国产一级在线看 | 黄色电影小说 | 久久久 激情 | 91av视频在线免费观看 | 一区二区三区中文字幕在线观看 | 日韩另类在线 | 国产精品96久久久久久吹潮 | 九九热精品在线 | 狠狠插狠狠操 | 在线看免费| 国产电影一区二区三区四区 | 在线中文字幕电影 | 在线视频一区二区 | 欧美日韩aaaa | 久久久受www免费人成 | 国产精品久久久精品 | 亚洲国产大片 | 亚洲黄a| 欧美aa一级 | 黄色片网站av | 亚洲综合情 | 在线观看中文字幕一区二区 | 国产在线 一区二区三区 | 久久久国产影院 | 日韩av视屏在线观看 | www.狠狠色.com| 国产成人久久精品77777综合 | 国产亚洲精品久久久久久网站 | 在线免费中文字幕 | 五月激情av| 欧美日韩视频观看 | 国产精品成人免费 | 国产精品久久99综合免费观看尤物 | 午夜精品久久久久久久久久久久 | 最新日韩视频在线观看 | 91少妇精拍在线播放 | 激情五月婷婷网 | 中文字幕精品视频 | av电影在线不卡 | 国产精彩视频一区 | 亚洲综合欧美日韩狠狠色 | 四虎国产精品成人免费影视 | 伊人永久 | 天天干天天拍天天操天天拍 | 国产精品精品国产色婷婷 | 久久久久久高潮国产精品视 | 操操操天天操 | 九九免费观看全部免费视频 | 欧美亚洲三级 | 人人爽人人香蕉 | 91看片麻豆 | 九九久久国产 | 亚洲精品麻豆视频 | 激情影音先锋 | 久久国产精品久久精品 | 狠狠干中文字幕 | 免费97视频 | 亚洲国产丝袜在线观看 | 91精品国产自产在线观看永久 | 91精品国产福利在线观看 | 黄色精品一区 | 日韩久久久久久久 | 国内亚洲精品 | 特黄特色特刺激视频免费播放 | 欧美另类老妇 | 欧美在线观看小视频 | 青春草视频 | 国产一区视频导航 | 天天草综合网 | 国产精品女主播一区二区三区 | 久久草草热国产精品直播 | 免费一级片视频 | 国产精品毛片一区二区 | 国产小视频在线免费观看 | 久久久视屏 | 久久视频 | 在线视频 亚洲 | 中文字幕av免费 | 国际精品久久久 | 99免费观看视频 | 免费看国产曰批40分钟 | 久草精品在线观看 | av免费片 | 91香蕉嫩草| 不卡的一区二区三区 | 免费观看视频的网站 | 九九热只有精品 | 久久久2o19精品 | 亚洲天堂网视频 | 日韩久久精品一区 | 日韩免费在线 | 中文字幕日本特黄aa毛片 | 波多野结衣电影久久 | 成人av高清在线 | 国产精品一区专区欧美日韩 | 精品国产aⅴ麻豆 | www.狠狠色 | 久久免费公开视频 | 丁香激情综合久久伊人久久 | 91大神电影 | 天天久久综合 | 精品国产乱码久久久久 | 精品国产久 | 日韩草比 | 伊人手机在线 | 国产一区在线视频 | 亚洲国产精品999 | 国产一区二区高清视频 | 少妇bbbb| 综合久色| 成人一区二区在线观看 | 婷婷精品国产一区二区三区日韩 | 久久精品79国产精品 | 日韩天天干 | 日韩在线 一区二区 | 国产一级在线观看 | 91人网站 | 国产精品久久久久9999 | 天天干天天弄 | 五月婷婷色 | 天天摸天天舔天天操 | 黄www在线观看 | 97视频免费观看 | 黄色日视频 | 日韩理论片在线观看 | 99在线精品免费视频九九视 | 国产一级性生活视频 | 色吧av色av| 美女网站视频久久 | 久久好看 | 成人av一二三区 | 欧美一级日韩三级 | 久章操 | 亚洲国产精品电影 | 国产色综合 | 成年人黄色免费网站 | 久久综合导航 | 国产一区免费视频 | 亚洲精品美女免费 | 亚洲第一色 | 婷婷精品进入 | 特级毛片爽www免费版 | 99视频网站 | 精久久久久 | 日韩在线 一区二区 | 人人澡人人添人人爽一区二区 | 激情在线网站 | 狠狠操操网| 9在线观看免费高清完整 | 久久情爱 | 成人影片免费 | 色视频网站免费观看 | 黄色一级网 | 天天插综合网 | 欧美日韩91| 中文字幕 国产 一区 | 免费精品国产 | 精品成人久久 | 天天干天天色2020 | 国产一区私人高清影院 | 国产中文伊人 | 天堂网在线视频 | 一区二区欧美在线观看 | 懂色av一区二区在线播放 | 人人插人人射 | 伊人久久婷婷 | 中文字幕精品一区二区三区电影 | 国产精品日韩精品 | 免费精品视频在线 | 亚洲视频 视频在线 | 最近中文国产在线视频 | 久久亚洲人 | 国内外激情视频 | 91成人蝌蚪 | 欧美日韩二三区 | 国产高清精品在线 | 午夜视频免费播放 | 亚洲一区二区三区精品在线观看 | 成年人免费电影在线观看 | 日本性高潮视频 | 亚洲久草在线视频 | 成人中文字幕+乱码+中文字幕 | 三级性生活视频 | 亚洲电影黄色 | 五月婷婷丁香激情 | 免费看的黄网站 | 日韩av免费在线看 | 亚洲精品美女久久久久网站 | 91最新地址永久入口 | 成人精品一区二区三区电影免费 | 国产精品久久综合 | 国产在线欧美日韩 | 久久精品视频2 | 亚洲精品综合在线 | 色国产精品 | 91最新视频 | 亚洲一区av | 免费中文字幕 | 日韩精品一区二区三区在线视频 | 黄色一级大片在线观看 | 亚洲干视频在线观看 | 麻豆超碰| 久久久综合九色合综国产精品 | 日韩有码在线播放 | 久久一久久 | 欧美性色xo影院 | 免费看搞黄视频网站 | 国产精品理论在线观看 | 国产成人精品午夜在线播放 | 久久一区二区三区日韩 | 久久影院精品 | 成人影视免费看 | 欧美日韩天堂 | 久草视频资源 | 亚洲91视频 | 欧美激情视频一区二区三区免费 | 三级在线视频观看 | 久久久久免费精品国产小说色大师 | av中文字幕亚洲 | 狠狠狠干 | 国产精品6 | 国产精品嫩草69影院 | 九九精品视频在线看 | 国产一二三四在线视频 | 一区二区理论片 | 亚洲精品国产麻豆 | 亚洲精品字幕在线观看 | 亚洲国产精久久久久久久 | 国产不卡免费 | 激情丁香综合五月 | 国产精品嫩草影视久久久 | 69久久夜色精品国产69 | 精品字幕在线 | 午夜精品一二三区 | 亚洲理论片在线观看 | 日本公妇色中文字幕 | 麻豆一精品传二传媒短视频 | 亚洲国产婷婷 | 伊人婷婷| 久久久久久久久福利 | 又污又黄网站 | 国产九色视频在线观看 | 亚洲电影网站 | 亚洲乱码国产乱码精品天美传媒 | 91精品在线免费观看视频 | 欧美亚洲国产一卡 | 久草在在线 | 亚洲片在线观看 | 91免费看片黄 | 在线国产日韩 | 色婷婷中文 | 国产手机精品视频 | 在线欧美小视频 | 97超碰中文字幕 | 在线视频麻豆 | 精品国产一二三四区 | 国产一区在线不卡 | 激情综合电影网 | 欧美日韩一级久久久久久免费看 | 看片一区二区三区 | 免费看黄20分钟 | 日韩免费电影网 | av免费电影网站 | 成人久久久久久久久久 | a视频在线看 | 国产无限资源在线观看 | 91中文字幕在线播放 | 日本午夜在线观看 | 欧美日韩国产一区二区在线观看 | .精品久久久麻豆国产精品 亚洲va欧美 | 久久久久久久久免费视频 | 国产成人av免费在线观看 | 黄色成人av | 国产一级在线播放 | 欧洲色综合 | 欧美网址在线观看 | 91传媒免费观看 | a精品视频 | 欧美日本国产在线观看 | 久久综合五月 | 丝袜美腿一区 | 久久久久久久久久久久久久免费看 | 992tv在线 | 在线观看网站你懂的 | 激情五月婷婷 | 国产精品9区 | 久草视频中文在线 | 蜜臀久久99精品久久久无需会员 | 国产一级黄色片免费看 | 国产精彩视频一区二区 | 免费在线观看a v | 亚洲欧美乱综合图片区小说区 | 久久99日韩 | 亚洲第二色 | 国产精品五月天 | 亚洲午夜精品一区二区三区电影院 | 一本大道久久精品懂色aⅴ 五月婷社区 | 丰满少妇在线观看 | 在线观看国产麻豆 | 国产日韩精品一区二区 | 夜夜躁狠狠躁日日躁 | 国产一区网 | 午夜免费福利视频 | 波多野结衣一区 | 亚洲免费观看视频 | 中文字幕在线免费看线人 | 视频一区视频二区在线观看 | 精品少妇一区二区三区在线 | 天天干天天怕 | 超碰电影在线观看 | 99热精品国产一区二区在线观看 | 天天操天天干天天爽 | 毛片美女网站 | 国产裸体永久免费视频网站 | 2018精品视频 | 亚洲最新精品 | 安徽妇搡bbbb搡bbbb | 国内精品视频在线播放 | 黄色片网站大全 | 亚洲一级国产 | 99在线观看| 久久激情日本aⅴ | 一级片视频在线 | 日批视频在线观看免费 | 国产精品亚洲片夜色在线 | 91在线视频观看 | 国产亚洲精品久久久久久久久久久久 | 在线电影 一区 | 亚州天堂| 香蕉视频啪啪 | 日韩av中文字幕在线免费观看 | 人人添人人 | 九色在线 | 国产精品乱码在线 | 精品国产一区二区三区av性色 | 最新超碰 | 精品欧美一区二区在线观看 | 网站免费黄 | 九九免费在线视频 | 九色91在线 | 91成人久久| 国产精品综合久久久久 | 97夜夜澡人人双人人人喊 | 免费在线观看视频一区 | 国产vs久久 | 久久人人97超碰精品888 | 久久av免费 | 日韩免 | 久久视频国产精品免费视频在线 | 国产白浆视频 | 久久国色夜色精品国产 | 91成人亚洲 | 国产精品久久久久久久久久 | 青青河边草观看完整版高清 | 91精品爽啪蜜夜国产在线播放 | 激情视频免费在线观看 | 91久久奴性调教 | 亚洲综合狠狠干 | 欧美视频国产视频 | 国产 在线观看 | 亚洲精品久久激情国产片 | 丁香导航 | 亚洲a色 | 久久久www成人免费精品 | www.狠狠色 | 中文字幕二区三区 | 中文字幕第一页在线视频 | 亚洲精品久久久蜜桃 | 色综合在 | 国产成人av一区二区三区在线观看 | 在线观看aaa| 久久99在线观看 | 成人在线视频免费 | 国产96精品 | 国产精品视频久久久 | 国产精品第二十页 | 亚洲 在线 | 亚洲午夜av电影 | 日韩欧美在线第一页 | 2024av在线播放 | 一区二区三区电影在线播 | 正在播放国产精品 | 九九三级毛片 | 久久精品视频在线免费观看 | 久久影院中文字幕 | 粉嫩av一区二区三区四区 | 亚洲精品美女在线 | 久艹在线播放 | 欧美成人中文字幕 | 久久久影院| 免费高清av在线看 | 五月婷婷色播 | 免费在线一区二区 | 免费观看www7722午夜电影 | 中文字幕在线观看第二页 | 亚洲国产成人高清精品 | 久久久91精品国产一区二区精品 | 国产在线观看国语版免费 | 久久久影院一区二区三区 | 免费a级黄色毛片 | 精品国产伦一区二区三区观看说明 | 狠狠黄 | 国产91全国探花系列在线播放 | 99欧美| 能在线观看的日韩av | 欧美日本高清视频 | 国产综合精品一区二区三区 | 久久久久久久久久久免费av | 日本3级在线观看 | 黄色三级久久 | 久草在在线| 日韩va欧美va亚洲va久久 | 国产精品一区二区久久精品 | 亚洲人成影院在线 | 亚洲一区二区视频在线播放 | 欧美日本高清视频 | 正在播放 久久 | 一级黄色片在线免费看 | 青青啪| 激情婷婷丁香 | 日韩艹 | 十八岁免进欧美 | av字幕在线 | 日韩欧美视频在线免费观看 | 91av在线免费视频 | 成年人在线播放视频 | 国产69精品久久久久99 | 91精品日韩 | 中文字幕精品www乱入免费视频 | 午夜精品久久久久久中宇69 | 婷色在线 | 婷婷色婷婷 | av成人亚洲 | 激情综合国产 | 色噜噜在线观看视频 | 99久久超碰中文字幕伊人 | 亚洲国产剧情 | 91视频下载 | 91九色pron| 中文字幕在线观看不卡 | 永久免费看av | 伊人网综合在线观看 | 91av中文| 久久99精品国产91久久来源 | 911国产在线观看 | 天天色天天爱天天射综合 | 久久综合爱 | 中文 一区二区 | av在线一二三区 | 在线日韩中文 | 久草在线在线视频 | 色综合天天色综合 | 超碰在线免费福利 | 色噜噜在线观看视频 | 18久久久 | 久久精品精品 | 日本韩国中文字幕 | 狠狠狠操 | 国产91在线播放 | 手机在线看永久av片免费 | 久草剧场|