IPForce is a Python library that provides HTTP adapters for forcing specific IP protocol versions (IPv4 or IPv6) during HTTP requests. It's particularly useful for testing network connectivity, ensuring compatibility with specific network configurations, and controlling which IP protocol version is used for DNS resolution and connections.
| PyPI Counter | |
| Github Stars |
| Branch | main | dev |
| CI |
| Code Quality |
- Download Version 0.2 or Latest Source
pip install .
- Check Python Packaging User Guide
pip install ipforce==0.2
Use when you need to ensure connections only use IPv4 addresses, useful for legacy systems that don't support IPv6, networks with IPv4-only infrastructure, or testing IPv4 connectivity.
from ipforce import IPForceAdapter, IPVersion, IPForceMethod
import requests
session = requests.Session()
adapter = IPForceAdapter(IPVersion.V4, IPForceMethod.LOCK)
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get('https://ifconfig.co/json')Use when you need to ensure connections only use IPv6 addresses, useful for modern networks with IPv6 infrastructure, testing IPv6 connectivity, or applications requiring IPv6-specific features.
from ipforce import IPForceAdapter, IPVersion, IPForceMethod
import requests
session = requests.Session()
adapter = IPForceAdapter(IPVersion.V6, IPForceMethod.LOCK)
session.mount('http://', adapter)
session.mount('https://', adapter)
response = session.get('https://ifconfig.co/json')from ipforce import IPForceSession, IPVersion
with IPForceSession(IPVersion.V4) as session:
response = session.get('https://ifconfig.co/json')| Method | Description |
|---|---|
IPForceMethod.LOCK |
Thread-safe — global lock serialization (default) |
IPForceMethod.GLOBAL |
Non-thread-safe — temporary getaddrinfo patch |
Warning
IPForceMethod.GLOBAL is NOT thread-safe. It modifies the global socket.getaddrinfo function, which can cause race conditions in multi-threaded applications. Use IPForceMethod.LOCK (the default) for concurrent usage.
The following direct class usage still works but is deprecated in favor of the unified API above:
from ipforce import IPv4LockAdapter, IPv6LockAdapter
session = requests.Session()
session.mount('http://', IPv4LockAdapter()) # or IPv6LockAdapter()
session.mount('https://', IPv4LockAdapter()) # or IPv6LockAdapter()
response = session.get('https://ifconfig.co/json')Just fill an issue and describe it. We'll check it ASAP!
- Please complete the issue template
You can also join our discord server
Give a ⭐️ if this project helped you!
If you do like our project and we hope that you do, can you please support us? Our project is not and is never going to be working for profit. We need the money just so we can continue doing what we do ;-)

