![Testing](https://github.com/dmachard/python-publicaddr/workflows/Testing/badge.svg) ![Build](https://github.com/dmachard/python-publicaddr/workflows/Build/badge.svg) ![Publish](https://github.com/dmachard/python-publicaddr/workflows/Publish/badge.svg)
# What is this?
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
Simple python module for getting your **public IP V4 and V6** from several providers in **random** mode with also several protocols (DNS, HTTPS and STUN).
Supported providers
| IP Checker | HTTPS | STUN | DNS | IPv4 | IPv6 | Use Policy |
|--------------|-------|------|-----|------|------|------------------------------------------------|
| google | ❌ | ✔️ | ✔️ | ✔️ | ✔️ | |
| cloudflare | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | |
| openDNS | ❌ | ❌ | ✔️ | ✔️ | ✔️ | |
| akamai | ✔️ | ❌ | ✔️ | ✔️ | ✔️ | |
| ipify | ✔️ | ❌ | ❌ | ✔️ | ✔️ | |
| icanhazip | ✔️ | ❌ | ❌ | ✔️ | ✔️ | |
| matrix | ❌ | ✔️ | ❌ | ✔️ | ✔️ | |
| framasoft | ❌ | ✔️ | ❌ | ✔️ | ✔️ | |
| ifconfig.me | ✔️ | ❌ | ❌ | ✔️ | ✔️ | |
## Installation
![python 3.13.x](https://img.shields.io/badge/python%203.13.x-tested-blue) ![python 3.12.x](https://img.shields.io/badge/python%203.12.x-tested-blue) ![python 3.11.x](https://img.shields.io/badge/python%203.11.x-tested-blue) ![python 3.10.x](https://img.shields.io/badge/python%203.10.x-tested-blue)
This module can be installed from [pypi](https://pypi.org/project/publicaddr/) website
```bash
pip install publicaddr
```
## Lookup for IPv4 and IPv6
Lookup for your public IPs from random providers with DNS or HTTP protocols with 3 retries if no ips are returned.
This is the default behaviour of the `lookup` function.
```python
import publicaddr
publicaddr.lookup()
{'ip4': 'x.x.x.x', 'ip6': 'x:x:x:x:x:x:x:x', 'provider': 'opendns',
'proto': 'dns', 'duration': '0.037'}
```
## Configuration
This module can be configurated with environment variables
| Variables | Description |
| ------------- | ------------- |
| PUBLICADDR_DEBUG | debug mode 1 or 0 |
| PUBLICADDR_TIMEOUT | timeout, default is 2s |
| PUBLICADDR_RETRIES | retries, default is 3|
| PUBLICADDR_IPV6_ENABLED | enable ipv6 with 1 or 0 to disable |
| PUBLICADDR_LOOKUP_HTTPS | lookup with HTTPS protocol (1 or 0 to disable) |
| PUBLICADDR_LOOKUP_DNS | lookup with DNS protocol (1 or 0 to disable) |
| PUBLICADDR_LOOKUP_STUN | lookup with STUN protocol (1 or 0 to disable) |
## Specific lookups
### Lookup for public IP with specific protocol
Lookup for your public IPs from random DNS providers with specific protocol.
```python
import publicaddr
publicaddr.lookup(providers=publicaddr.DNS, retries=2)
{'ip4': 'x.x.x.x', 'ip6': 'x:x:x:x:x:x:x:x', 'provider': 'opendns',
'proto': 'dns', 'duration': '0.037'}
```
Default constants for transport protocol:
- `publicaddr.HTTPS`
- `publicaddr.DNS`
- `publicaddr.STUN`
### Get IPv4 or IPv6 only
Get your public IPv4 with default provider (Google with DNS protocol).
```python
import publicaddr
publicaddr.get(ip=publicaddr.IPv4)
{'ip': 'x.x.x.x', 'duration': '0.025'}
```
Default constants for IP version:
- `publicaddr.IPv4`
- `publicaddr.IPv6`
### Get IP with specific provider
Example to use the provider Cloudflare instead of the default one.
```python
import publicaddr
myip = publicaddr.get(provider=publicaddr.CLOUDFLARE, proto=publicaddr.DNS)
{'ip': 'x:x:x:x:x:x:x:x', 'duration': '0.020'}
```
Default constants for providers:
- `publicaddr.CLOUDFLARE`
- `publicaddr.GOOGLE`
- `publicaddr.OPENDNS`
- `publicaddr.AKAMAI`
- `publicaddr.IPIFY`
- `publicaddr.ICANHAZIP`
- `publicaddr.MATRIX`
- `publicaddr.FRAMASOFT`
- `publicaddr.IFCONFIG_ME`
## For developpers
### Run from source
```bash
sudo apt install python3-venv
python3 -m venv venv
source venv/bin/activate
```
```bash
python3 -m pip install -r requirements.txt
python3 example.py
```
### Custom configuration
See the default [configuration file](../main/publicaddr/publicaddr.yml)
### Run test units
```bash
python3 -m unittest discover tests/
```
Raw data
{
"_id": null,
"home_page": "https://github.com/dmachard/python-publicaddr",
"name": "publicaddr",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": null,
"keywords": "public ip dns http google akamai opendns cloudflare",
"author": "Denis MACHARD",
"author_email": "d.machard@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/66/9b/641ae20f9427a5616a4ffe07f942b784138d345ddc97984750fa5c01cde5/publicaddr-0.16.0.tar.gz",
"platform": "any",
"description": "![Testing](https://github.com/dmachard/python-publicaddr/workflows/Testing/badge.svg) ![Build](https://github.com/dmachard/python-publicaddr/workflows/Build/badge.svg) ![Publish](https://github.com/dmachard/python-publicaddr/workflows/Publish/badge.svg)\n\n# What is this?\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\nSimple python module for getting your **public IP V4 and V6** from several providers in **random** mode with also several protocols (DNS, HTTPS and STUN).\n\nSupported providers\n\n| IP Checker | HTTPS | STUN | DNS | IPv4 | IPv6 | Use Policy |\n|--------------|-------|------|-----|------|------|------------------------------------------------|\n| google | \u274c | \u2714\ufe0f | \u2714\ufe0f | \u2714\ufe0f | \u2714\ufe0f | |\n| cloudflare | \u2714\ufe0f | \u274c | \u2714\ufe0f | \u2714\ufe0f | \u2714\ufe0f | |\n| openDNS | \u274c | \u274c | \u2714\ufe0f | \u2714\ufe0f | \u2714\ufe0f | |\n| akamai | \u2714\ufe0f | \u274c | \u2714\ufe0f | \u2714\ufe0f | \u2714\ufe0f | |\n| ipify | \u2714\ufe0f | \u274c | \u274c | \u2714\ufe0f | \u2714\ufe0f | |\n| icanhazip | \u2714\ufe0f | \u274c | \u274c | \u2714\ufe0f | \u2714\ufe0f | |\n| matrix | \u274c | \u2714\ufe0f | \u274c | \u2714\ufe0f | \u2714\ufe0f | |\n| framasoft | \u274c | \u2714\ufe0f | \u274c | \u2714\ufe0f | \u2714\ufe0f | |\n| ifconfig.me | \u2714\ufe0f | \u274c | \u274c | \u2714\ufe0f | \u2714\ufe0f | |\n\n## Installation\n\n![python 3.13.x](https://img.shields.io/badge/python%203.13.x-tested-blue) ![python 3.12.x](https://img.shields.io/badge/python%203.12.x-tested-blue) ![python 3.11.x](https://img.shields.io/badge/python%203.11.x-tested-blue) ![python 3.10.x](https://img.shields.io/badge/python%203.10.x-tested-blue)\n\nThis module can be installed from [pypi](https://pypi.org/project/publicaddr/) website\n\n```bash\npip install publicaddr\n```\n\n## Lookup for IPv4 and IPv6\n\nLookup for your public IPs from random providers with DNS or HTTP protocols with 3 retries if no ips are returned.\nThis is the default behaviour of the `lookup` function.\n\n```python\nimport publicaddr\n\npublicaddr.lookup()\n{'ip4': 'x.x.x.x', 'ip6': 'x:x:x:x:x:x:x:x', 'provider': 'opendns',\n'proto': 'dns', 'duration': '0.037'}\n```\n\n## Configuration\n\nThis module can be configurated with environment variables\n| Variables | Description |\n| ------------- | ------------- |\n| PUBLICADDR_DEBUG | debug mode 1 or 0 |\n| PUBLICADDR_TIMEOUT | timeout, default is 2s |\n| PUBLICADDR_RETRIES | retries, default is 3|\n| PUBLICADDR_IPV6_ENABLED | enable ipv6 with 1 or 0 to disable |\n| PUBLICADDR_LOOKUP_HTTPS | lookup with HTTPS protocol (1 or 0 to disable) |\n| PUBLICADDR_LOOKUP_DNS | lookup with DNS protocol (1 or 0 to disable) |\n| PUBLICADDR_LOOKUP_STUN | lookup with STUN protocol (1 or 0 to disable) |\n\n\n## Specific lookups\n\n### Lookup for public IP with specific protocol\n\nLookup for your public IPs from random DNS providers with specific protocol.\n\n```python\nimport publicaddr\n\npublicaddr.lookup(providers=publicaddr.DNS, retries=2)\n{'ip4': 'x.x.x.x', 'ip6': 'x:x:x:x:x:x:x:x', 'provider': 'opendns',\n'proto': 'dns', 'duration': '0.037'}\n```\n\nDefault constants for transport protocol:\n\n- `publicaddr.HTTPS`\n- `publicaddr.DNS`\n- `publicaddr.STUN`\n\n### Get IPv4 or IPv6 only\n\nGet your public IPv4 with default provider (Google with DNS protocol).\n\n```python\nimport publicaddr\n\npublicaddr.get(ip=publicaddr.IPv4)\n{'ip': 'x.x.x.x', 'duration': '0.025'}\n```\n\nDefault constants for IP version:\n\n- `publicaddr.IPv4`\n- `publicaddr.IPv6`\n\n### Get IP with specific provider\n\nExample to use the provider Cloudflare instead of the default one.\n\n```python\nimport publicaddr\n\nmyip = publicaddr.get(provider=publicaddr.CLOUDFLARE, proto=publicaddr.DNS)\n{'ip': 'x:x:x:x:x:x:x:x', 'duration': '0.020'}\n```\n\nDefault constants for providers:\n\n- `publicaddr.CLOUDFLARE`\n- `publicaddr.GOOGLE`\n- `publicaddr.OPENDNS`\n- `publicaddr.AKAMAI`\n- `publicaddr.IPIFY`\n- `publicaddr.ICANHAZIP`\n- `publicaddr.MATRIX`\n- `publicaddr.FRAMASOFT`\n- `publicaddr.IFCONFIG_ME`\n\n## For developpers\n\n### Run from source\n\n```bash\nsudo apt install python3-venv\npython3 -m venv venv\nsource venv/bin/activate\n```\n\n```bash\npython3 -m pip install -r requirements.txt\npython3 example.py\n```\n\n### Custom configuration\n\nSee the default [configuration file](../main/publicaddr/publicaddr.yml)\n\n### Run test units\n\n```bash\npython3 -m unittest discover tests/\n```\n",
"bugtrack_url": null,
"license": null,
"summary": "Getting your public IP v4 and v6",
"version": "0.16.0",
"project_urls": {
"Homepage": "https://github.com/dmachard/python-publicaddr"
},
"split_keywords": [
"public",
"ip",
"dns",
"http",
"google",
"akamai",
"opendns",
"cloudflare"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "2216ee56f4ef56eebe3305598661aa7fbba77407f35bd3bd6c6bb574dfbef561",
"md5": "0f8454ab54d3319d179b8145a800f293",
"sha256": "7a6bb546137139508974196301a99c12e1c57b2324587b06cde36548066fff6a"
},
"downloads": -1,
"filename": "publicaddr-0.16.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0f8454ab54d3319d179b8145a800f293",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": null,
"size": 16472,
"upload_time": "2024-11-11T17:35:26",
"upload_time_iso_8601": "2024-11-11T17:35:26.654888Z",
"url": "https://files.pythonhosted.org/packages/22/16/ee56f4ef56eebe3305598661aa7fbba77407f35bd3bd6c6bb574dfbef561/publicaddr-0.16.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "669b641ae20f9427a5616a4ffe07f942b784138d345ddc97984750fa5c01cde5",
"md5": "48e38d04d2c818c100d9948a17a7c2ff",
"sha256": "35eb8d1c4e90f53aea3130d28a33cd2ae16c263bfb645f0ba3d49bde2315950b"
},
"downloads": -1,
"filename": "publicaddr-0.16.0.tar.gz",
"has_sig": false,
"md5_digest": "48e38d04d2c818c100d9948a17a7c2ff",
"packagetype": "sdist",
"python_version": "source",
"requires_python": null,
"size": 10590,
"upload_time": "2024-11-11T17:35:28",
"upload_time_iso_8601": "2024-11-11T17:35:28.621257Z",
"url": "https://files.pythonhosted.org/packages/66/9b/641ae20f9427a5616a4ffe07f942b784138d345ddc97984750fa5c01cde5/publicaddr-0.16.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-11-11 17:35:28",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "dmachard",
"github_project": "python-publicaddr",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [
{
"name": "requests",
"specs": [
[
"==",
"2.32.3"
]
]
},
{
"name": "dnspython",
"specs": [
[
"==",
"2.7.0"
]
]
},
{
"name": "aiostun",
"specs": [
[
"==",
"0.4.1"
]
]
},
{
"name": "pyyaml",
"specs": [
[
"==",
"6.0.2"
]
]
},
{
"name": "checkifvalid",
"specs": [
[
"==",
"0.1.1"
]
]
}
],
"lcname": "publicaddr"
}