Skip to content
/ pystun3 Public
forked from jtriley/pystun

A Python STUN client for getting NAT type and external IP

License

Notifications You must be signed in to change notification settings

talkiq/pystun3

This branch is 12 commits ahead of jtriley/pystun:master.

Folders and files

NameName
Last commit message
Last commit date

Latest commit

5fdc6fa · Jun 28, 2024
Jun 12, 2018
Mar 11, 2020
Jun 28, 2024
Nov 6, 2014
Jun 12, 2018
Nov 6, 2014
Jun 28, 2024
May 19, 2021
Sep 20, 2011
Jun 12, 2018
Jun 12, 2018
Jun 28, 2024

Repository files navigation

PyStun3

A Python STUN client for getting NAT type and external IP. Supports Python versions 2 and 3.

This project has been forked several times:

PyStun follows RFC 3489. A server following STUN-bis hasn't been found on internet so RFC3489 is the only implementation.

Installation

To install the latest version:

$ pip install pystun3

or download/clone the source and install manually using:

$ cd /path/to/pystun3/src
$ python setup.py install

If you're hacking on pystun3 you should use the 'develop' command instead:

$ python setup.py develop

This will make a link to the sources inside your site-packages directory so that any changes are immediately available for testing.

Usage

From command line:

$ pystun3
NAT Type: Full Cone
External IP: <your-ip-here>
External Port: 54320

Pass --help for more options:

% pystun3 --help
usage: pystun3 [-h] [-d] [-H STUN_HOST] [-P STUN_PORT] [-i SOURCE_IP]
               [-p SOURCE_PORT] [--version]

optional arguments:
  -h, --help            show this help message and exit
  -d, --debug           Enable debug logging (default: False)
  -H STUN_HOST, --host STUN_HOST
                        STUN host to use (default: None)
  -P STUN_PORT, --host-port STUN_PORT
                        STUN host port to use (default: 3478)
  -i SOURCE_IP, --interface SOURCE_IP
                        network interface for client (default: 0.0.0.0)
  -p SOURCE_PORT, --port SOURCE_PORT
                        port to listen on for client (default: 54320)
  --version             show program's version number and exit

From Python:

import stun
nat_type, external_ip, external_port = stun.get_ip_info()

This will rotate through an internal list of STUN servers until a response is found. If no response is found you will get "Blocked" as the nat_type and None for external_ip and external_port.

If you prefer to use a specific STUN server:

nat_type, external_ip, external_port = stun.get_ip_info(stun_host='stun.ekiga.net')

If you prefer to use a specific STUN server port:

nat_type, external_ip, external_port = stun.get_ip_info(stun_port=3478)

You may also specify the client interface and port that is used although this is not needed:

sip = "0.0.0.0" # interface to listen on (all)
port = 54320 # port to listen on
nat_type, external_ip, external_port = stun.get_ip_info(sip, port)

Read the code for more details...

LICENSE

MIT

About

A Python STUN client for getting NAT type and external IP

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Python 100.0%