Awesome Open Source
Awesome Open Source

.. |pypi| image:: .. _pypi: .. |license| image:: .. _license:


|pypi|_ |license|_

Discover external IP addresses and NAT topologies using STUN (Simple Traversal of UDP Through Network Address Translators).

PyNAT follows RFC 3489, and is inspired by a similar program for Python 2.x called PyStun. PyNAT supports Python 2.7 and later.

.. _RFC 3489: .. _PyStun:


PyNAT requires Python 2.7 or later.

From PyPI

Install PyNAT by running pip3 install pynat from the command line.

.. note::

On some Linux systems, installation may require running pip with root permissions, or running pip3 install pynat --user. The latter may require exporting ~/.local/bin to PATH.

From GitHub

Clone or download the git repo_, navigate to the directory, and run::

python3 sdist
cd dist
pip3 install pynat-<version>.tar.gz

.. _git repo:


To get information about the network topology and external IP/port used, run pynat::

Network type: UDP Firewall 
Internal address: 
External address:

Run pynat -h or pynat --help for more options::

usage: pynat [-h] [--source_ip SOURCE_IP] [--source-port SOURCE_PORT]
             [--stun-host STUN_HOST] [--stun-port STUN_PORT]

PyNAT v0.0.0 Discover external IP addresses and NAT topologies using STUN.
Copyright (C) 2018 Ariel Antonitis. Licensed under the MIT License.

optional arguments:
  -h, --help            show this help message and exit
  --source_ip SOURCE_IP
                        The source IPv4 address to bind to.
  --source-port SOURCE_PORT
                        The source port to bind to.
  --stun-host STUN_HOST
                        The STUN host to use for queries.
  --stun-port STUN_PORT
                        The port of the STUN host to use for queries.

To use PyNAT inside a Python shell or project::

from pynat import get_ip_info
topology, ext_ip, ext_port = get_ip_info()

To also get information about the internal IP, if unknown::

topology, ext_ip, ext_port, int_ip = get_ip_info(include_internal=True)


PyNAT versioning functions on a MAJOR.MINOR.PATCH.[DEVELOP] model. Only stable, non development releases will be published to PyPI. Because PyNAT is still a beta project, the MAJOR increment will be 0. Minor increments represent new features. Patch increments represent problems fixed with existing features.

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
python (50,963
python-3 (198
stun (20
nat-traversal (16

Find Open Source By Browsing 7,000 Topics Across 59 Categories