bmoreira18
bmoreira18

Reputation: 143

Multiple strings comparison

I have created a calling in restapi to print results in one array, but i need to compare this data before saving this result, example:

for id in ids:
    try:
        now = datetime.datetime.now()
        token, tokenExpireDate = checkTokenExpireDate(apiUrl, client_id, client_secret, token, now, tokenExpireDate) 
        data = getHostDetails(apiUrl, token, id)['resources'][0]
        local_ip = data['local_ip']
        allowed_range_ip = ['10.20.*', '10.10.*', '172.12.*']
        if local_ip in allowed_range_ip:
            print(local_ip)
        else:
            print(local_ip)
    except Exception as e:
        print({'exception': e, 'id': id})

I want to compare allowed_range_ip with local_ip, if local_ip is true in allowed_range_ip save in array, how i could do this? I'm new using python, so take easy :)

EDIT: Example output script (some random ip's), I want to print only ip's similar to allowed_range_ip:

    10.160.20.02
    172.17.0.9
    10.255.250.68
    10.80.10.20

Upvotes: 0

Views: 50

Answers (1)

Kirk Strauser
Kirk Strauser

Reputation: 30933

Python's builtin ipaddress module makes this easy. You create an ip_network object, and then you can see if the given ip_address is in that network. For instance:

from ipaddress import ip_address, ip_network

allowed_range_ip = [
    ip_network("10.20.0.0/16"),
    ip_network("10.10.0.0/16"),
    ip_network("172.12.0.0/16"),
]

local_ip1 = ip_address('10.20.30.40')
print(any(local_ip1 in net for net in allowed_range_ip))

local_ip2 = ip_address('10.21.30.40')
print(any(local_ip2 in net for net in allowed_range_ip))

Upvotes: 5

Related Questions