Python以字符串形式随机生成IP地址

Python以字符串形式随机生成IP地址,python,ip-address,Python,Ip Address,在Python中,如果我想以IP地址的形式生成一个随机字符串,我应该怎么做 例如:“10.0.1.1”,“10.0.3.14”,“172.23.35.1”等等 有人能帮我一下吗 >>> import random >>> import socket >>> import struct >>> socket.inet_ntoa(struct.pack('>I', random.randint(1, 0xffffffff)

在Python中,如果我想以IP地址的形式生成一个随机字符串,我应该怎么做

例如:
“10.0.1.1”
“10.0.3.14”
“172.23.35.1”
等等

有人能帮我一下吗

>>> 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,如
0.0.0.0
255.255.255

import random

ip = ".".join(map(str, (random.randint(0, 255) 
                        for _ in range(4))))

这可能太明显了,但如果您需要某个范围内的随机IP,您可以使用:

import random

for x in xrange(1,100):
  ip = "192.168."
  ip += ".".join(map(str, (random.randint(0, 255) 
                          for _ in range(2))))

  print ip

lib还有很多其他有用的选项来伪造数据

from faker import Faker  
faker = Faker()  
ip_addr = faker.ipv4()  

参考:

以IP地址的形式生成随机字符串的另一种方法是:

>>> ip = '{}.{}.{}.{}'.format(*__import__('random').sample(range(0,255),4))
>>> ip
'45.162.105.102'
您还可以使用Python,它在创建、操作和操作IPv4和IPv6地址及网络方面更为广泛:

import ipaddress
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'
更快:模仿 如果你想提高速度,试试看

具有有效CIDR的IP:伪造者 如果您希望使用有效的CIDR生成随机IP地址,请尝试


有关为什么Faker需要更长时间的更多详细信息,请参见此。

如果我想获得V6的IP地址,我应该怎么做?非常感谢。如果我想在特定范围内生成IP(例如,在1.2.4.8和8.4.2.1之间)?@AhmedHussein
为范围内的n生成IP(0x01020408,0x08040201):。。。socket.inet_ntoa(…)
@changzhi请看下面我对IPv6的回答如果二进制IPs适合您,您不需要调用inet_ntoa,二进制格式的大小比字符串格式小得多(IPv4总是4字节,IPv6总是16字节)这使得它成为通过流式sockets发送/接收的安全选择。您可以拿出映射,只需执行
”。加入(str(randint(0255))。范围(4))
低估答案。生成IP的好方法,没有外部依赖。我有一个潜在的愚蠢问题,我无法从文档或谷歌中澄清-为什么ipaddress.IPv4Address.\u ALL\u one/ipaddress.IPv6Address.\u ALL\u one给我们的IP地址总数减去1?是否保留一个地址作为广播地址?谢谢,别忘了零。这是第一个有效的IP地址@mmTmmRHaha-doh,谢谢,我想我盯着屏幕看太久了,弄糊涂了!干杯,你的解决方案正是我想要的!在代码的其他地方,我使用了np.random.randint()。为了保持一致,我尝试将random.randint(0,MAX_IPV4/6)替换为np.random.randint(0,(MAX_IPV4/6+1))。(由于np.random.randint()不包含上限值,因此我在此版本的MAX_IPV4/MAX_IPV6的值中添加了一个。)对于IPV4版本,这与您上面的回答相同,但是,当我尝试执行IPV6版本时,会出现以下错误:“ValueError:high超出int64的界限”。你对这个错误有什么想法吗?是否需要将IPV6结果强制转换为其他数据类型?Thanks@mmTmmR
np.random.randint()
只能达到
2**64-1
,一个64位整数,而
ipaddress.IPv6Address.\u ALL\u one
是128位。如果您只需要一个随机地址,请使用;NumPy是为阵列设计的。
import ipaddress
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'
from mimesis import Internet 
random_ip = Internet().ip_v4()
from faker import Faker  
random_valid_ip = Faker().ipv4()