我对python很陌生,这可能是一个简单的答案,但我如何使用ipaddress module
从0.0.0.0/0生成随机ip。
main.py
import ipaddress
def ipv4():
net4 = ipaddress.ip_network('0.0.0.0/0')
for ips in net4:
ipv4()
电流输出
0.0.149.149
0.0.149.150
0.0.149.151
0.0.149.152
预期输出
193.189.190.7
154.195.199.61
199.231.163.232
179.112.190.133
188.120.233.146
下面的怎么样?
import ipaddress
import random
import sys
print(str(ipaddress.IPv4Address(random.randint(0,2 ** 32))))
一种可能的解决方案:
import random
MAX_IPV4 = ipaddress.IPv4Address._ALL_ONES # 2 ** 32 - 1
MAX_IPV6 = ipaddress.IPv6Address._ALL_ONES # 2 ** 128 - 1
def random_ipv4():
return ipaddress.IPv4Address._string_from_ip_int(
random.randint(0, MAX_IPV4)
)
def random_ipv6():
return ipaddress.IPv6Address._string_from_ip_int(
random.randint(0, MAX_IPV6)
)
示例:
>>> random.seed(444)
>>> random_ipv4()
'79.19.184.109'
>>> random_ipv4()
'3.99.136.189'
>>> random_ipv4()
'124.4.25.53'
>>> random_ipv6()
'4fb7:270d:8ba9:c1ed:7124:317:e6be:81f2'
>>> random_ipv6()
'fe02:b348:9465:dc65:6998:6627:1300:29c9'
>>> random_ipv6()
'74a:dd88:1ff2:bfe3:1f3:81ad:debd:db88'
如果ipaddress
是可选的,则可以使用此
>>> import random
>>> import socket
>>> import struct
>>> socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
'197.38.59.143'
>>> socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)))
'228.237.175.64'
如果你想要多个IP,把它放在这样的循环中,
for _ in range(10):
print(socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff))))
输出:
151.166.184.41
237.59.227.33
249.179.144.26
248.151.116.150
94.186.44.162
251.238.134.106
5.239.51.182
198.1.81.192
24.116.237.239
187.8.43.55
此代码适用于C类IP地址:
#Class C IP address range 192.168.0.0 - 192.168.255.255
import ipaddress
import random
def ipv4(no_ips):
for i in range(1,no_ips):
netwrk_id = random.choice(range(0,255))
host_id = random.choice(range(0,255))
ip_address_gen = f'192.i68.{netwrk_id}.{host_id}'
print(ip_address_gen)
ipv4(20) #this generates 20 Class C IP addresses
在这里,我导入了random
模块,并使用它生成0和网络ID/主机ID限制(即255(之间的随机整数。然后将192.168
(就像C类地址的情况一样(添加到生成的值中。在调用ipv4函数时,只需将要生成的IP地址数作为参数传递即可。您可以将此代码扩展到B类IP地址,在这种情况下,您将生成三组不同的整数,因为B类范围如下:172.16.0.0-172.31.255.255
这是@balderman建议的代码的略微改进版本。
生成有效的随机IP地址:
import ipaddress
import random
def get_random_ip():
"""Generate a random IP Address
Returns:
string: IP Address
"""
randomIPAddress = str(ipaddress.IPv4Address(random.randint(0, 2 ** 32)))
isPrivateIp = ipaddress.ip_address(randomIPAddress).is_private
if isPrivateIp:
return get_random_ip()
return randomIPAddress