text: from __future__ import print_function
  from __future__ import absolute_import
  import argparse
  import logging
  import sys
  
  import stun
  
  
  def make_argument_parser():
      parser = argparse.ArgumentParser(
          formatter_class=argparse.ArgumentDefaultsHelpFormatter
      )
  
      parser.add_argument(
          '-d', '--debug', action='store_true',
          help='Enable debug logging'
      )
      parser.add_argument(
          '-H', '--stun-host',
          help='STUN host to use'
      )
      parser.add_argument(
          '-P', '--stun-port', type=int,
          default=stun.DEFAULTS['stun_port'],
          help='STUN host port to use'
      )
      parser.add_argument(
          '-i', '--source-ip',
          default=stun.DEFAULTS['source_ip'],
          help='network interface for client'
      )
      parser.add_argument(
          '-p', '--source-port', type=int,
          default=stun.DEFAULTS['source_port'],
          help='port to listen on for client'
      )
  
      parser.add_argument('--version', action='version', version=stun.__version__)
  
      return parser
  
  
  def main():
      try:
          options = make_argument_parser().parse_args()
  
          if options.debug:
              logging.basicConfig()
              stun.log.setLevel(logging.DEBUG)
  
          nat_type, external_ip, external_port = stun.get_ip_info(
              source_ip=options.source_ip,
              source_port=options.source_port,
              stun_host=options.stun_host,
              stun_port=options.stun_port
          )
          print('NAT Type:', nat_type)
          print('External IP:', external_ip)
          print('External Port:', external_port)
      except KeyboardInterrupt:
          sys.exit()
  
  if __name__ == '__main__':
      main()
  