mylar/lib/pystun
evilhero abcc4e88ec FIX:(#1046) if nzbname had '+' within title, would fail to create nzb within cache (nzb only), IMP:(#1079) test notification buttons added, FIX: Changed names of functions to ResumeSeries/DeleteSeries/PauseSeries, IMP: pushbullet notification converted now using requests module, FIX:(#1088) better versioning detection when searching, enforce permissions on cache directory before writing (to ensure nzbs will be written with proper permissions), IMP: Popup dialog box on Delete Series in Comic Details page - option to delete series folder & contents avaiable as well, IMP: Try to determine local IP on startup to allow for better execution of sending nzbs to nzb client 2015-07-21 02:37:41 -04:00
..
tests FIX:(#1046) if nzbname had '+' within title, would fail to create nzb within cache (nzb only), IMP:(#1079) test notification buttons added, FIX: Changed names of functions to ResumeSeries/DeleteSeries/PauseSeries, IMP: pushbullet notification converted now using requests module, FIX:(#1088) better versioning detection when searching, enforce permissions on cache directory before writing (to ensure nzbs will be written with proper permissions), IMP: Popup dialog box on Delete Series in Comic Details page - option to delete series folder & contents avaiable as well, IMP: Try to determine local IP on startup to allow for better execution of sending nzbs to nzb client 2015-07-21 02:37:41 -04:00
README.rst FIX:(#1046) if nzbname had '+' within title, would fail to create nzb within cache (nzb only), IMP:(#1079) test notification buttons added, FIX: Changed names of functions to ResumeSeries/DeleteSeries/PauseSeries, IMP: pushbullet notification converted now using requests module, FIX:(#1088) better versioning detection when searching, enforce permissions on cache directory before writing (to ensure nzbs will be written with proper permissions), IMP: Popup dialog box on Delete Series in Comic Details page - option to delete series folder & contents avaiable as well, IMP: Try to determine local IP on startup to allow for better execution of sending nzbs to nzb client 2015-07-21 02:37:41 -04:00
__init__.py FIX:(#1046) if nzbname had '+' within title, would fail to create nzb within cache (nzb only), IMP:(#1079) test notification buttons added, FIX: Changed names of functions to ResumeSeries/DeleteSeries/PauseSeries, IMP: pushbullet notification converted now using requests module, FIX:(#1088) better versioning detection when searching, enforce permissions on cache directory before writing (to ensure nzbs will be written with proper permissions), IMP: Popup dialog box on Delete Series in Comic Details page - option to delete series folder & contents avaiable as well, IMP: Try to determine local IP on startup to allow for better execution of sending nzbs to nzb client 2015-07-21 02:37:41 -04:00
cli.py FIX:(#1046) if nzbname had '+' within title, would fail to create nzb within cache (nzb only), IMP:(#1079) test notification buttons added, FIX: Changed names of functions to ResumeSeries/DeleteSeries/PauseSeries, IMP: pushbullet notification converted now using requests module, FIX:(#1088) better versioning detection when searching, enforce permissions on cache directory before writing (to ensure nzbs will be written with proper permissions), IMP: Popup dialog box on Delete Series in Comic Details page - option to delete series folder & contents avaiable as well, IMP: Try to determine local IP on startup to allow for better execution of sending nzbs to nzb client 2015-07-21 02:37:41 -04:00

README.rst

.. image:: https://travis-ci.org/jtriley/pystun.svg?branch=master
    :target: https://travis-ci.org/jtriley/pystun

.. image:: https://coveralls.io/repos/jtriley/pystun/badge.png
   :target: https://coveralls.io/r/jtriley/pystun


PyStun
======
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 version::

    $ pip 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 [-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