是否有任何現有的庫將字符串解析爲ipv4或ipv6地址,或至少確定一個字符串是否是IP地址(任何一種)?檢查IP地址
檢查IP地址
回答
是的,有ipaddr
模塊,您可以幫助檢查字符串是IPv4/IPv6地址,並檢測其版本。
import ipaddr
import sys
try:
ip = ipaddr.IPAddress(sys.argv[1])
print '%s is a correct IP%s address.' % (ip, ip.version)
except ValueError:
print 'address/netmask is invalid: %s' % sys.argv[1]
except:
print 'Usage : %s ip' % sys.argv[0]
但是,這不是一個標準模塊,所以它不總是可以使用它。 您還可以嘗試使用標準socket
模塊:
import socket
try:
socket.inet_aton(addr)
print "ipv4 address"
except socket.error:
print "not ipv4 address"
對於IPv6地址必須使用socket.inet_pton(socket.AF_INET6, address)
。
我也要注意,inet_aton
將嘗試轉換(真正將其轉換)地址像10
,127
等等,這看起來不像IP地址。
對於IPv4可以使用
socket.inet_aton(some_string)
如果它拋出一個異常,some_string
是不是一個有效的IP地址
對於IPv6,你可以使用:再次
socket.inet_pton(socket.AF_INET6, some_string)
,它拋出異常如果some_string
不是有效地址
這隻適用於vor不過,IPv4地址。 – 2012-08-06 12:12:32
@Sven,我爲v6添加了一種方式,它只是更復雜一點 – 2012-08-06 12:15:50
哦,我不知道這一點。我認爲這是最好的解決方案 - 我會刪除我的。 – 2012-08-06 12:18:45
的IPv4 + IPv6解決方案僅僅依靠標準庫的源代碼。返回4
或6
或提高ValueError
。
try:
# Python 3.3+
import ipaddress
def ip_kind(addr):
return ipaddress.ip_address(addr).version
except ImportError:
# Fallback
import socket
def ip_kind(addr):
try:
socket.inet_aton(addr)
return 4
except socket.error: pass
try:
socket.inet_pton(socket.AF_INET6, addr)
return 6
except socket.error: pass
raise ValueError(addr)
如果你肯定知道該地址是有效的,只是想確定它是否是IPv4或IPv6,是不是足以只是做:
if ":" in address:
print("Ipv6")
else:
print("Ipv4")
我不知道這是一個IP。我需要檢查它是否是IP。爲了清楚起見,我更新了問題。 – Rory 2016-08-28 11:14:56
可以使用netaddr
庫。它有valid_ipv4/valid_ipv6方法:
import netaddr
if netaddr.valid_ipv4(str_ip) is True:
print("IP is IPv4")
else:
if netaddr.valid_ipv6(str_ip) is True:
print("IP is IPv6")
我喜歡ip_interface因爲它處理的情況下既沒有前綴的面膜,例如,既有「10.1.1.1/24」,以及簡單的「10.1.1.1」。不用說,既適用於v4的以及V6
from ipaddress import ip_interface
ip_interface("10.1.1.1/24").ip
ip_interface("10.1.1.1/24").ip.version
ip_interface("10.1.1.1").ip
ip_interface("10.1.1.1").ip.version
- 1. BASH IP地址檢查
- 2. 檢查IP地址範圍
- 3. 檢查真實IP IP地址的NodeJS
- 4. PHP檢查IP地址是否在IP地址範圍
- 5. ip地址檢索
- 6. 用Qt檢查IP活動地址
- 7. 檢查您自己的IP地址
- 8. ip地址的gethostname空檢查
- 9. 檢查IP地址表 - MySQL的PHP
- 10. Python3檢查IP地址是否全球
- 11. ip保留地址檢查功能
- 12. 如何檢查子域的IP地址
- 13. 檢查IP地址類型,IPv4或IPv6
- 14. IP地址檢查了錯誤
- 15. 檢查IP地址並下載數據
- 16. 查找IP地址
- 17. 檢索的IP地址與RKA IP地址的中間件
- 18. Powershell腳本檢查IP連接並刪除IP地址租約
- 19. whois查詢IP地址
- 20. Docker Stunnel - 查找IP地址
- 21. 查找真實IP地址
- 22. 多個IP地址查詢
- 23. 如何從IP地址列表中查找IP地址範圍
- 24. 如何檢測本地IP地址
- 25. 檢測FireMonkey3下的本地IP地址
- 26. C#如何檢查本地網絡的遠程IP地址
- 27. 獲取和檢查本地計算機的IP地址
- 28. 檢查IP地址是否映射到本地主機
- 29. MAC地址和IP地址
- 30. 變換IP地址,IP地址範圍(起始IP - 結束IP)
AttributeError:'module'對象沒有屬性'ip_address' – Rory 2012-08-06 12:16:43
@Blazemore:在新版本的模塊中使用'IPAddress';修復了我的答案;感謝您的建議! – 2012-08-06 12:20:18
只需添加一點點背景,套接字impl就快得多了。 – marcinkuzminski 2015-03-30 06:05:00