Skip to content

An implementation of RadixTree for efficiently storing, removing & checking in O(1) time for all Ip addresses.

License

Notifications You must be signed in to change notification settings

rakesht2499/ip_model

Repository files navigation

License Python application

Ip-Model

A Data Structure for efficiently storing, removing and checking all Ipv4 addresses in O(1) time.

Pre-requisite

  • pytest

Usage

Single Ip's

Ipv4

from ip_model.Ipv4 import Ipv4

blacklist = Ipv4()

To add an IP:

# arg: String
# returns: True
blacklist.add("192.0.0.18")

To remove an IP:

# arg: String
# returns: removed IP
blacklist.remove("192.0.0.18")

To check if an IP is present/not:

# arg: String
# returns: bool
blacklist.is_present("192.0.0.18")

Ipv6

from ip_model.Ipv4 import Ipv6

blacklist = Ipv6()

To add an IP:

# arg: String
# returns: True
blacklist.add("192::18")

To remove an IP:

# arg: String
# returns: removed IP
blacklist.remove("192:ffff:e034::23")

To check if an IP is present/not:

# arg: String
# returns: bool
blacklist.is_present("::5:4fed")

CIDR

Ipv4:

To Add

# arg: String
# returns: True
blacklist.add_cidr("192.92.53.0/24")
# arg: String
# returns: True
blacklist.add_cidr("192.92.53.0/255.255.255.252")

To remove:

# arg: String
# returns: removed CIDR
blacklist.remove_cidr("192.92.53.0/24")

Ipv6:

To Add

# arg: String
# returns: True
blacklist.add_cidr("8653:53fe::/122/24")

To remove:

# arg: String
# returns: removed CIDR
blacklist.remove_cidr("8653:53fe::/122")

Note:

The tradeoff is, the call for how to handle with overlapping CIDR's must be taken by the service using the DS. The DataStructure only performs the requested operation with the given data

Ip Class (From v3.0.0)

Handles both Ipv4 and Ipv6

from ip_model.Ip import Ip

blacklist = Ip()

To add an IP:

# arg: String
# returns: True
blacklist.add("192.0.0.18")
blacklist.add("192::18")

To remove an IP:

# arg: String
# returns: removed IP
blacklist.remove("192.0.0.18")
blacklist.remove("1924::18")

Exception Handling

  • Throws TypeError: passing Invalid Datatype, incorrect number of arguments
  • Throws InvalidIpException: When an invalid Ip is passed
from ip_model.Exceptions import InvalidIpException

try:
    blacklist.add("192.455.554.343")
except InvalidIpException:
    print("Incorrect Ipv4 Address")

# For CIDR
try:
    blacklist.add("192.12.65.0/16")
except InvalidIpException:
    print("Incorrect CIDR")

How to Setup

mkdir ip-model && cd ip-model
git clone git@github.com:rakesht2499/ip_model.git
# -or -
git clone https://github.com/rakesht2499/ip_model.git

How to Test

cd tests/
pytest

For generating a html report of tests

cd tests/
pytest --html=report.html

Section For Geeks

Click here for ip-model: Under the Hood

About

An implementation of RadixTree for efficiently storing, removing & checking in O(1) time for all Ip addresses.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages