ネットマスクをドット付き十進表記 (A.B.C.D) から CIDR 表記へ変換する方法は以前に投稿したのですが、その逆に変換する必要に迫られたので書いてみました。
なおエラー処理はしていませんので、おかしなネットマスクを渡すとおかしな値が帰ってきます。ご注意ください。
コード
import socket
import struct
def mask2cidr(mask):
"""Convert netmask from Dotted address to CIDR."""
return bin(struct.unpack('!L', socket.inet_pton(socket.AF_INET, mask))[0])[2:].index('0')
テスト
>>> mask2cidr('255.255.255.0')
24
>>> mask2cidr('255.255.240.0')
20
>>> mask2cidr('255.255.255.192')
26