Python随机生成字符串的IP地址

时间:2014-01-09 07:59:27

标签: python

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

例如:"10.0.1.1""10.0.3.14""172.23.35.1"等。

有人可以给我一些帮助吗?

11 个答案:

答案 0 :(得分:37)

>>> 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'

注意这可能会产生0.0.0.0255.255.255.255等IP。

答案 1 :(得分:28)

如果你只想要一个字符串:

import random

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

答案 2 :(得分:6)

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

参考:Fake-Apache-Log-Generator

答案 3 :(得分:3)

In [123]: '.'.join('%s'%random.randint(0, 255) for i in range(4))
Out[123]: '45.204.56.200'

In [124]: '.'.join('%s'%random.randint(0, 255) for i in range(4))
Out[124]: '7.112.222.205'

答案 4 :(得分:3)

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

>>> ip = '{}.{}.{}.{}'.format(*__import__('random').sample(range(0,255),4))
>>> ip
'45.162.105.102'

答案 5 :(得分:1)

https://faker.readthedocs.io/en/latest/providers/faker.providers.internet.html

import faker
fake = Factory.create()
ip_addr = fake.ipv4(network=False)

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

答案 6 :(得分:1)

您还可以使用Python的ipaddress module,它对于在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'

答案 7 :(得分:0)

这可能太明显但如果你需要一个范围内的随机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

答案 8 :(得分:0)

更快:Mimesis

如果您正在寻找速度,请尝试Mimesis

from mimesis import Internet 
random_ip = Internet().ip_v4()

enter image description here

具有有效CIDR的IP:Faker

如果您希望生成具有有效CIDR的随机IP地址,请尝试Faker

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

enter image description here

有关为何费克需要更长的时间的更多详细信息,请参阅此issue

答案 9 :(得分:0)

from faker import Factory

fake_generator = Factory.create()
print(fake_generator.ipv4())

在尝试运行上述程序之前,请务必先安装 pip!

pip install Faker

查看软件包文档:https://faker.readthedocs.io/en/master/index.html

这是一个link directly to the ipv4 method docs

答案 10 :(得分:0)

如果尝试仅基于用户空间生成私有 IP 地址(192.168.xxx.xxx、172.16.xxx.xxx-172.31.255.255 和 10.xxx.xxx.xxx)

This 帖子给出了很好的答案

如果您正在尝试生成任何其他可以被视为公开的内容,请使用此(我的代码基于上面的帖子):

import random
def randomPublicIPaddress():
    '''
    oct 1 - cant be 10
    oct 2 - if oct1 == 192
                cant be 168
            if oct1 == 172
                cant be 16-31
    oct 3 - can be anything
    oct 4 - can be anything
    '''
    oct1 = random.choice([i for i in range(0,255) if i not in [10,127]])
    if oct1 == 192:
        oct2 = random.choice([i for i in range(0,255) if i not in [168]])
    elif oct1 == 172:
        oct2 = random.choice([i for i in range(0,255) if i not in range(16,31)])
    else:
        oct2 = random.randint(0,255)
    oct3 = random.randint(0,255)
    oct4 = random.randint(0,255)

    return ".".join(map(str,([oct1,oct2,oct3,oct4])))

警告,还有许多其他被视为“私有”的 IP 地址范围,请务必查看 IANA 上的列表