1

開始 IP アドレスとIPの数があります。カウントを 1024 のチャンクに分割し、次の方法でリストを作成します。

サンプル入力

ip = 90.1.0.0
count = 12000

必要な出力(列 #1 は開始 IP を示し、列 #2 はカウントを示します)

90.1.0.0 1024
90.1.4.0 1024
90.1.8.0 1024
90.1.12.0 1024
90.1.16.0 1024
90.1.20.0 1024
90.1.24.0 1024
90.1.28.0 1024
90.1.32.0 1024
90.1.36.0 1024
90.1.40.0 1024
90.1.44.0 736

簡単な説明

  • 90.1.0.0範囲から90.1.4.0(合計数 = 1024 * 1 = 1024)の間に 1024 の IP があります。

  • 賢明なように、範囲90.1.4.0から90.1.8.0(合計カウント= )の間に1024のipsがあります1024 * 2 = 2048

  • 範囲90.1.36.0から90.1.40.0(合計数 =1024 * 11 = 11264

  • カウント 1200012000 - 11264 = 736が必要なので、最後の IP 範囲で ( ) が必要になります。90.1.40.0 to 90.1.44.0

その他のサンプル

入力:

ip = 90.1.0.0
count = 32

出力:

90.1.0.0 32

これを進める方法を提案してもらえますか?私は Stack Overflow を初めて使用するので、何か見落としがあれば教えてください。

前もって感謝します!

4

3 に答える 3

2

このコードを試すことができます:

def from_string(s):
    "Convert dotted IPv4 address to integer."
    return reduce(lambda a,b: a<<8 | b, map(int, s.split(".")))

def to_string(ip):
    "Convert 32-bit integer to dotted IPv4 address."
    return ".".join(map(lambda n: str(ip>>n & 0xFF), [24,16,8,0]))

ip = '90.1.0.0'
count = 12000
block_size = 1024

ip_int = from_string(ip)
while count > 0:
    delta = min(count, block_size)
    print to_string(ip_int), delta
    ip_int += delta
    count -= delta

ここから取得した IP 変換コード。

于 2013-09-29T20:04:48.650 に答える
2

python3IP アドレスの操作を非常に簡単にするライブラリipaddress(python2 にはbackportがあります) が付属しています。

あなたの場合、次のように、必要な結果を生成するジェネレーターを作成できます。

import ipaddress

def addresses(start, count, interval):
    addr = ipaddress.ip_address(start)
    while count > 0:
            yield addr, min(count, interval)
            count -= interval
            addr += interval

for addr, num in addresses(u'90.1.0.0', 12000, 1024):
    print(addr, num)
于 2013-09-29T20:35:24.040 に答える