Python - check if the user's IP address is in the range of IP addresses

In my Python application, I have an array of IP address strings that looks something like this:

[
    "50.28.85.81-140", // Matches any IP address that matches the first 3 octets, and has its final octet somewhere between 81 and 140
    "26.83.152.12-194" // Same idea: 26.83.152.12 would match, 26.83.152.120 would match, 26.83.152.195 would not match
]

I installed netaddr, and while the documentation seems to be great, I can't wrap it around. It should be very simple: how to check if a given IP address matches one of these ranges? No need to use netaddrin particular - any simple Python solution.

+4
source share
2 answers

The idea is to split the IP address and check each component separately.

mask = "26.83.152.12-192"
IP = "26.83.152.19"
def match(mask, IP):
   splitted_IP = IP.split('.')
   for index, current_range in enumerate(mask.split('.')):
      if '-' in current_range:
         mini, maxi = map(int,current_range.split('-'))
      else:
         mini = maxi = int(current_range)
      if not (mini <= int(splitted_IP[index]) <= maxi):
         return False
   return True
+4
source

Not sure if this is the best option, but this is a basic python, no extra packages are needed.

  • ip_range, 1 , , range if. , 4 int/range.
  • zip split

. range in ( Python 3) ( "1000000000000000" (1000000000000001) " Python 3" ?)

ip_range = "50.28.85.81-140"

toks = [[int(d)] if d.isdigit() else range(int(d.split("-")[0]),int(d.split("-")[1]+1)) for d in ip_range.split(".")]

print(toks) # debug

for test_ip in ("50.28.85.86","50.284.85.200","1.2.3.4"):
    print (all(int(a) in b for a,b in zip(test_ip.split("."),toks)))

( ):

[[50], [28], [85], range(81, 140)]
True
False
False
+3

Source: https://habr.com/ru/post/1666010/


All Articles