是否有任何现有的库将字符串解析为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