Possible Duplicate:
How can I check if an ip is in a network in python
What is the easy way to match subnet to an ip address in python, so that if the ip address is in the subnet I can choose it?
Thanks in advance.
Possible Duplicate:
How can I check if an ip is in a network in python
What is the easy way to match subnet to an ip address in python, so that if the ip address is in the subnet I can choose it?
Thanks in advance.
In Python 3.3+, you can use ipaddress module:
>>> import ipaddress
>>> ipaddress.ip_address('192.0.43.10') in ipaddress.ip_network('192.0.0.0/16')
True
If your Python installation is older than 3.3, you can use this backport.
If you want to evaluate a lot of IP addresses this way, you'll probably want to calculate the netmask upfront, like
n = ipaddress.ip_network('192.0.0.0/16')
netw = int(n.network_address)
mask = int(n.netmask)
Then, for each address, calculate the binary representation with one of
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
Finally, you can simply check:
in_network = (a & mask) == netw
in_network
is False
. I am using the port of the module to 2.6 and 2.7. Using ipaddr
(code.google.com/p/ipaddr-py) is the same: yielding a False for the above example. Note that I imported the py
module files directly without run the setup.py
, which I don't think is an issue. –
Mandatory If for a given IP you want to find a prefix from a long list of prefixes, then you can implement longest prefix match. You first build a prefix tree from your list of prefixes, and later, you traverse the tree looking for the furthest leaf that matches your prefix.
It sounds scary, but it is not that bad :)
© 2022 - 2024 — McMap. All rights reserved.