2016-10-17 7 views
0

現在、私は以下のように対処ランダムなIP(IPv4)を生成するメソッドを作成しました:どのようにIPアドレスからホストを削除するには?

def rand_ip(mask=False): 
    """This uses the TEST-NET-3 range of reserved IP addresses. 
    """ 
    test_net_3 = '203.0.113.' 
    address = test_net_3 + six.text_type(random.randint(0, 255)) 
    if mask: 
     address = '/'.join((address, 
          six.text_type(random.randrange(24, 32)))) 
    return address 

をそして今、私は 私はマスクが有効になっていた時にホストアドレスを削除する機能を持つメソッドを強化する必要があります、ケース

1.1.2.23/24(before) => 1.1.2.0/24(after host address removed) 
1.1.2.23/16 => 1.1.0.0 (the same as above) 

を下回っている、実際に変更がちょうど(右から左へ32-マスク、)左の部品を交換された16進数で0 で、任意の簡単な方法または存在していたのlibsはありますが、この(Pythonの2.7倍を行うことができますし、 3.xの互換性を考慮する必要があります)?

+0

作成してから変更する代わりに、 '' '' '' '' 'によって' '' '' '' '' 'によって' – wwii

+0

@wwii、Bilal Baqarの答えを確認してください。私のorigianlメソッドでは、おそらくipネットワーク '1.1.2.34/16'を生成しますが、正しいネットワーク '1.1.0.0/16' – TommyLike

答えて

1

これはあなたが探していたものですか?

>>> from netaddr import * 
>>> ip = IPNetwork('1.1.2.23/16') 
>>> ip.ip 
IPAddress('1.1.2.23') 
>>> ip.network 
(IPAddress('1.1.0.0') 
>>> ip.netmask 
(IPAddress('255.255.0.0') 

ランダムにIPとネットマスクを生成するには、このコードを使用します。しかし、これはより良いことができます。

import random 
def get_random_ip(): 
    def ip(): 
     return random.randint(0, 255) 

    value = str(ip()) 
    for i in range(3): 
     value = value + "." + str(ip()) 

    return value 

def get_random_cidr(): 
    return random.randrange(24, 32) 
+0

を入手したので、ホストなしのアドレスが必要です!任意のlibsとipランダムネットワーク(マスクを含む)を生成する? – TommyLike

+0

@TommyLikeそれに2つの機能が追加されました。しかし、それはより良い書き込むことができます。 –

関連する問題