Skip to main content

A Python STUN client for getting NAT type and external IP (RFC 3489)

Project description

A Python STUN client for getting NAT type and external IP

This is a fork of pystun originally created by gaohawk (http://code.google.com/p/pystun/)

PyStun follows RFC 3489: http://www.ietf.org/rfc/rfc3489.txt

A server following STUN-bis hasn’t been found on internet so RFC3489 is the only implementation.

Installation

To install the latest stable version:

$ easy_install pystun

or download/clone the source and install manually using:

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

If you’re hacking on pystun 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:

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

Pass –help for more options:

% pystun --help
Usage: pystun [options]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -d, --debug           Enable debug logging
  -H STUN_HOST, --host=STUN_HOST
                        STUN host to use
  -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)

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

Changelog

0.0.4 (10/14/2013)

  • Stun: added functionality to pass the initial STUN server port explicitly

0.0.3 (05/21/2013)

  • Stun: fix UnboundLocalError in get_nat_type.

  • Stun: remove dead hosts from stun server list.

  • Handling get address info error.

  • Add version info to stun module and stun.cli.

  • Add MANIFEST.in and include README.rst.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pystun-0.0.4.tar.gz (5.4 kB view details)

Uploaded Source

File details

Details for the file pystun-0.0.4.tar.gz.

File metadata

  • Download URL: pystun-0.0.4.tar.gz
  • Upload date:
  • Size: 5.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pystun-0.0.4.tar.gz
Algorithm Hash digest
SHA256 4de4c59b26b134c66f55bbc860684e5572066bc5266ecb1f078f64928ff0671a
MD5 abd28264ac8e5d0fe54a1725db10d76c
BLAKE2b-256 f7d48df3ca920eed883524d6214faf0ef494053e9e4c01b0d5070434dcf4aed4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page