API Documentation¶
Checkers¶
As of PyFunceble 4.0.0
, it is possible to use our checker without any
configuration of initialization of any sort. Simply choose your checker,
interact with it and get what you are looking for!
Getting started¶
Before starting to play with any checkers you need to understand 2 things:
The first one is the base of all checkers, and the second is the base of all
status you get when you call the
get_status()
method.
Interaction with checkers¶
Note
This method is the same for all available checkers.
Let’s say we want to test the availability of github.com
.
We first have to select and prepare the checker.
from PyFunceble import DomainAvailabilityChecker
# Here we take the default configuration.
checker = DomainAvailabilityChecker()
Then we just set the subject to work with.
checker.set_subject("github.com")
We can then get the status.
status = checker.get_status()
# Note: You can also do it in one shot.
status = checker.set_subject("github.com").get_status()
Once we have a status object, we can convert it to a different format.
# To dict.
status_dict = status.to_dict()
# To JSON.
status_json = status.to_json()
We can also interact with any of the attributes of the status object.
# This is the status.
print("GitHub is", status.status)
But finally, and probably most importantly, we can ask questions.
Warning
Each checker have their own set of methods. Be sure to read them or follow the autocomplete of your editor.
# Is it active ?
print("Is GitHub active ?", status.is_active())
# Is it inactive ?
print("Is GitHub inactive ?", status.is_inactive())
# Is it invalid ?
print("Is github.com invalid ?", status.is_invalid())
Available Checkers¶
In this section you can find the list of available checkers and how to import them.
Availability checkers¶
- Domain:
-
or
from PyFunceble import DomainAvailabilityChecker
- Domain and IP:
-
or
from PyFunceble import DomainAndIPAvailabilityChecker
- URL:
-
or
from PyFunceble import URLAvailabilityChecker
- IP (v4 / v6):
-
or
from PyFunceble import IPAvailabilityChecker
Syntax checkers¶
- Domain (Second level domain / Subdomain):
-
or
from PyFunceble import DomainAvailabilityChecker
- Second Level Domain:
-
or
from PyFunceble import SecondLvlDomainSyntaxChecker
- Subdomain:
-
or
from PyFunceble import SubDomainSyntaxChecker
- URL:
-
or
from PyFunceble import URLSyntaxChecker
- IP (v4 / v6):
-
or
from PyFunceble import IPSyntaxChecker
- IPv4
-
or
from PyFunceble import IPv4SyntaxChecker
- IPv6
-
or
from PyFunceble import IPv6SyntaxChecker
Reputation checkers¶
- Domain:
-
or
from PyFunceble import DomainReputationChecker
- Domain and IP:
-
or
from PyFunceble import DomainAndIPReputationChecker
- URL:
-
or
from PyFunceble import URLReputationChecker
- IP (v4 / v6):
-
or
from PyFunceble import IPReputationChecker
Endpoints¶
Note
This section document what you can call directly when you use PyFunceble as an imported module.
Warning
Some of those methods may be deprecated and removed in the future (open for discussion).
The tool to check the availability or syntax of domain, IP or URL.
██████╗ ██╗ ██╗███████╗██╗ ██╗███╗ ██╗ ██████╗███████╗██████╗ ██╗ ███████╗
██╔══██╗╚██╗ ██╔╝██╔════╝██║ ██║████╗ ██║██╔════╝██╔════╝██╔══██╗██║ ██╔════╝
██████╔╝ ╚████╔╝ █████╗ ██║ ██║██╔██╗ ██║██║ █████╗ ██████╔╝██║ █████╗
██╔═══╝ ╚██╔╝ ██╔══╝ ██║ ██║██║╚██╗██║██║ ██╔══╝ ██╔══██╗██║ ██╔══╝
██║ ██║ ██║ ╚██████╔╝██║ ╚████║╚██████╗███████╗██████╔╝███████╗███████╗
╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═══╝ ╚═════╝╚══════╝╚═════╝ ╚══════╝╚══════╝
- Author:
- Nissar Chababy, @funilrys, contactTATAfunilrysTODTODcom
- Special thanks:
- https://pyfunceble.github.io/#/special-thanks
- Contributors:
- https://pyfunceble.github.io/#/contributors
- Project link:
- https://github.com/funilrys/PyFunceble
- Project documentation:
- https://pyfunceble.readthedocs.io/en/latest/
- Project homepage:
- https://pyfunceble.github.io/
License:
Copyright 2017, 2018, 2019, 2020, 2022, 2023 Nissar Chababy
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-
PyFunceble.
get_complements
(subject: str, include_given: bool = False) → List[str][source]¶ Provides the complements of a given subject.
A complement is a for example
example.org
ifwww.example.org
is given and vice-versa.Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import Subject2Complements my_subject = "example.org" complements = Subject2Complements( my_subject ).get_converted(include_given=True)
Parameters: - subject – The subject to work with.
- include_given – Include the given subject in the result.
-
PyFunceble.
is_domain
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid second level domain or subdomain.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import DomainSyntaxChecker my_subject = "example.org" the_status = DomainSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is a domain (2nd level or subdomain). print(f"{my_subject} is domain ? {the_status.is_valid()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_domain_malicious
(subject: str, **kwargs) → bool[source]¶ Checks if the given domain is malicious.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import DomainReputationChecker my_subject = "example.org" the_status = DomainReputationChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is malicious. print(f"{my_subject} is Malicious ? {the_status.is_malicious()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ip
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid IP range.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPSyntaxChecker my_subject = "192.168.0.0" the_status = IPSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is an IP (v4 or v6). print(f"{my_subject} is IP ? {the_status.is_valid()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ip_range
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid IP range.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPSyntaxChecker my_subject = "192.168.0.0" the_status = IPSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is an IP range (v4 or v6). print(f"{my_subject} is IP range ? {the_status.is_valid_range()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ipv4
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid IPv4.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPSyntaxChecker my_subject = "192.168.0.0" the_status = IPSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is an IPv4. print(f"{my_subject} is IPv4 ? {the_status.is_valid_v4()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ipv4_malicious
(subject: str, **kwargs) → bool[source]¶ Checks if the given IPv4 is malicious.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPReputationChecker my_subject = "192.168.0.1" the_status = IPReputationChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is malicious. print(f"{my_subject} is Malicious ? {the_status.is_malicious()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ipv4_range
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid IPv4 range.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPSyntaxChecker my_subject = "192.168.0.0" the_status = IPSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is IPv4 range. print(f"{my_subject} is IPv4 range ? {the_status.is_valid_v4_range()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ipv6
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid IPv6.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPSyntaxChecker my_subject = "192.168.0.0" the_status = IPSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is an IPv6. print(f"{my_subject} is IPv6 ? {the_status.is_valid_v6()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_ipv6_range
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid IPv6 range.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import IPSyntaxChecker my_subject = "::1" the_status = IPSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is IPv6 range. print(f"{my_subject} is IPv6 range ? {the_status.is_valid_v6_range()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_second_level_domain
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid second level domain.
Warning
This method was added for retrocompatibility. It may be removed in the future and is still available for convenience.
Please consider the following alternative example:
from PyFunceble import SecondLvlDomainSyntaxChecker my_subject = "example.org" the_status = SecondLvlDomainSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is a second level domain. print(f"{my_subject} is 2nd level domain ? {the_status.is_valid()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_subdomain
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is a syntactically valid subdomain.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import SubDomainSyntaxChecker my_subject = "hello.example.org" the_status = SubDomainSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is a subdomain. print(f"{my_subject} is subdomain ? {the_status.is_valid()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
is_url
(subject: str, **kwargs) → bool[source]¶ Checks if the given subject is syntactically a valid URL.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import DomainReputationChecker my_subject = "https://example.org" the_status = URLSyntaxChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is a URL. print(f"{my_subject} is URL ? {the_status.is_valid()}")
Parma subject: The subject to check.
-
PyFunceble.
is_url_malicious
(subject: str, **kwargs) → bool[source]¶ Checks if the given URL is malicious.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import URLReputationChecker my_subject = "https://example.org" the_status = URLReputationChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is malicious. print(f"{my_subject} is Malicious ? {the_status.is_malicious()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
load_config
(*args, **kwargs) → None[source]¶ Placeholder before deletion.
Since 4.0.0, you are not required to load the configuration before hand. If you still want too because you may want to use a special CLI related method, you can doing it so:
import PyFunceble.facility PyFunceble.facility.ConfigLoader.start()
-
PyFunceble.
test
(subject: str, **kwargs) → PyFunceble.checker.availability.status.AvailabilityCheckerStatus[source]¶ Checks the avaialbility of the given subject assuming that it is a domain or an IP.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import DomainAndIPAvailabilityChecker my_subject = "example.org" the_status = DomainAndIPAvailabilityChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is available. print(f"{my_subject} is available ? {the_status.is_available()}")
Parameters: subject – The subject to work with.
-
PyFunceble.
url_test
(subject: str, **kwargs) → PyFunceble.checker.availability.status.AvailabilityCheckerStatus[source]¶ Checks the availability of the given subject assuming that it is a URL.
Warning
This method may be removed in the future. It is still available for convenience.
Please consider the following alternative example:
from PyFunceble import URLAvailabilityChecker my_subject = "http://example.org" the_status = URLAvailabilityChecker( my_subject ).get_status() # Get the status in dict format. print(the_status.to_dict()) # Get the status in json format. print(the_status.to_json()) # Check if it is available. print(f"{my_subject} is available ? {the_status.is_available()}")
Parameters: subject – The subject to work with.
File generation while using the API¶
You may want to test using the API but still want the result structured normally like a CLI usage. For that case simply add the following.
"""
This is an example which let us manipulate the data and also generate the files
as if it was the CLI.
"""
import copy
import colorama
import PyFunceble.facility
import PyFunceble.storage
from PyFunceble import DomainAvailabilityChecker
from PyFunceble.cli.filesystem.dir_structure.restore import (
DirectoryStructureRestoration,
)
from PyFunceble.cli.processes.producer import ProducerProcessesManager
from PyFunceble.cli.utils import ascii_logo
# We initiate the coloration.
colorama.init(autoreset=True)
# We are in control, so we need to manually start the loading.
PyFunceble.facility.ConfigLoader.custom_config = {
"cli_testing": {"file_generation": {"plain": True}, "display_mode": {"quiet": True, "color": True}}
}
PyFunceble.facility.ConfigLoader.start()
print(ascii_logo.get_home_representation())
# This is needed as our idea is to communicate with the producer process instead
# of trying to implement everything again.
# So, this describes the dataset as they are sent to the tester process
# (normally from the CLi).
STD_COMMUNICATION_DATASET = {
"type": "single",
"subject_type": "domain",
# Destination inside the output directory.
"destination": "my_awesome_pyfunceble_wrapper",
"subject": None,
"idna_subject": None,
"source": "my_awesome_pyfunceble_wrapper",
"output_dir": None, # Will be handled automatically
"checker_type": "AVAILABILITY", # Must be one of our supported one!!
}
DOMAINS = ["github.com", "twitter.com"]
# In this example, we are cleaning up and regenerating the output directory
# at each run.
dir_structure_restoration = DirectoryStructureRestoration(
parent_dirname=STD_COMMUNICATION_DATASET["destination"]
).restore_from_backup()
# We start the producer process.
producer_proc = ProducerProcessesManager()
# We start the process manager now that we are ready.
producer_proc.start()
# We start and configure our availability checker.
avail_checker = DomainAvailabilityChecker(use_whois_lookup=False)
for domain in DOMAINS:
# We loop through our list of subject to test.
# We parse the current subject to the availability checker.
avail_checker.subject = domain
# Now we fetch the status object.
test_result = avail_checker.get_status()
# We prepare our communication dataset.
communication_dataset = copy.deepcopy(STD_COMMUNICATION_DATASET)
communication_dataset["subject"] = test_result.subject
communication_dataset["idna_subject"] = test_result.idna_subject
# We print the result (for us as we call this script.)
print(
f"{test_result.idna_subject} (IDNA: {test_result.subject}) "
f"is {test_result.status}"
)
# We order the generation of the status file by putting our information
# to the producer queue.
producer_proc.add_to_input_queue(
(communication_dataset, test_result), worker_name="main"
)
# We are now done, it's time to send the stop signal.
# The stop signal will inform the producer process that it needs to stop
# listening to new order (from the time it reads the stop signal).
producer_proc.send_stop_signal()
# Now we wait until it's done.
producer_proc.wait()
# From here all files were generated we can do whatever we want with them.