Trong Python 3.3+, bạn có thể sử dụng mô-đun ipaddress:
>>> import ipaddress
>>> ipaddress.ip_address('192.0.43.10') in ipaddress.ip_network('192.0.0.0/16')
True
Nếu cài đặt Python của bạn cũ hơn 3.3, bạn có thể sử dụng this backport.
Nếu bạn muốn đánh giá rất nhiều địa chỉ IP theo cách này, có thể bạn sẽ muốn tính toán netmask trả trước, giống như
n = ipaddress.ip_network('192.0.0.0/16')
netw = int(n.network_address)
mask = int(n.netmask)
Sau đó, đối với mỗi địa chỉ, tính toán nhị phân đại diện với một trong những
a = int(ipaddress.ip_address('192.0.43.10'))
a = struct.unpack('!I', socket.inet_pton(socket.AF_INET, '192.0.43.10'))[0]
a = struct.unpack('!I', socket.inet_aton('192.0.43.10'))[0] # IPv4 only
Cuối cùng, bạn chỉ có thể kiểm tra:
in_network = (a & mask) == netw
Nó thực sự không rõ ràng những gì bạn đang yêu cầu. Bạn đang chọn gì, IP hoặc mạng con? Câu hỏi là "làm cách nào để biết địa chỉ IP có nằm trong mạng con cụ thể không?" Hay cái gì? –