2016-11-28 13 views
0

私は、のpython3経由ipaddressモジュールを与えられたネットワーク範囲の有効なホストをリストしようとしていますが、すべての有効なホストをリストしようとしているときに、私はValueErrorをValueError('%s has host bits set' % self) を取得しています(%の自己「%sはホストビットセットを持っています」)。 documentationで述べたようIPアドレスモジュールとValueError

>>> ip_range=input("Enter IP Range:") 
Enter IP Range:192.168.56.101/16 
>>> list(ipa.ip_network(ip_range).hosts()) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python3.5/ipaddress.py", line 74, in ip_network 
    return IPv4Network(address, strict) 
    File "/usr/local/lib/python3.5/ipaddress.py", line 1536, in __init__ 
    raise ValueError('%s has host bits set' % self) 
ValueError: 192.168.56.101/16 has host bits set 
+0

これがコメントか回答か、場合によってはまともなドキュメントへのリンクであるかどうかは不明です。 IPアドレスには、「ネットワーク部分」と「ホスト部分」の2つの部分があります。ネットワーク部分が最初に来て、ホスト部分が2番目に来る。 '/'の後の数字は、どれくらいのビットが「ネットワーク部分」であるかを示します。基本的に、ルーティングに使用される部分です。ホスト部分は、ネットワークを見つけたらホストを見つけるためのものです。 – Vatine

答えて

2

:ネットワークが設定され、ホスト・ビットを有する場合、アドレスが有効なIPv4または IPv6アドレス、またはを表していない場合

A ValueErrorが送出されます。

スラッシュ(あなたのケースでは16)の後の数字は、subnetのために予約されるビット数、そう最後の16ビットがホスト・ビットであることを意味します。このメソッドはこれらのビットを0(未設定)として必要とします。

+0

だから私は192.168.56.101/0としてネットワークの範囲を入力する必要があるのですか?私はネットワークのコンセプトに満足していません。 –

+0

'192.168.0.0/16'はあなたが最も望むものです。 – Lafexlos

+0

ありがとうございます。試してみます –

0

別のオプションがあります。上記documentから 、我々はそれを見ることができます:

厳しいがTrueであり、ホストビットが供給されたアドレスに設定され、その後、 ValueErrorを送出した場合。それ以外の場合、ホストビットはマスクされて になり、適切なネットワークアドレスが決定されます。

ですので、もう一度お試しください。

ip_range = '192.168.56.101/16' 
list(ipaddress.ip_network(ip_range, False).hosts())