是否有任何現有的庫將字符串解析爲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 IP地址的NodeJS
- 3. ip地址檢索
- 4. 檢查IP地址並下載數據
- 5. 檢查您自己的IP地址
- 6. Python3檢查IP地址是否全球
- 7. 檢查IP地址表 - MySQL的PHP
- 8. 檢索的IP地址與RKA IP地址的中間件
- 9. Powershell腳本檢查IP連接並刪除IP地址租約
- 10. Docker Stunnel - 查找IP地址
- 11. 如何從IP地址列表中查找IP地址範圍
- 12. 獲取和檢查本地計算機的IP地址
- 13. 檢查IP地址是否映射到本地主機
- 14. IP地址
- 15. php:geting ip地址
- 16. 取IP地址
- 17. ip地址
- 18. cURL IP地址
- 19. 塊IP地址
- 20. 與IP地址
- 21. ejabberd ip地址
- 22. 如何檢測IP地址更改?
- 23. IP地址的位置檢測技術
- 24. 檢測Linux中IP地址的變化
- 25. 從Tomcat會話ID檢索IP地址?
- 26. 在Android上檢測wifi的IP地址?
- 27. Word VBA檢索IP地址「靜默」
- 28. 檢測僞造的IP地址?
- 29. 如何檢索Meteorjs上的IP地址?
- 30. PHP curl,檢索服務器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