Автор Тема: Публичното IP  (Прочетена 2678 пъти)

4096bits

  • Участник
  • *****
  • Публикации: 3176
    • Профил
Публичното IP
« -: Юни 16, 2015, 11:20 »
В XFCE има едно много хубаво нещо при аплетите за панела, наречено Generic Monitor.
Та бях му казал, на 5 минути да изпълнява curl ipv4.icanhazip.com и ми връщаше в чист текст единствено външното IP. И си стои в панела. Много хубаво тогава ми стана, като го открих това нещо. Ама като пък не съм свързан, излизаше нещо, дето един път само успях да го възпроизведа в терминала сам. Но пък го снимах.

http://prntscr.com/7hiz4y


И като ми излезеше така, това се разтегля до средата на панела. Грозна работа.
Та ето първото нещо дето сътворих на Pyrhon. Някой програмист да каже, може ли да му се оптимизира и къде съм писал прекалено. Изобщо, как би трябвало да е. Предаването на параметри  малко ми покачи температурата в главата, но вече всичко е наред.
Излъгах, първото беше  "Hello, World!"

Интересува ме най-вече последните два реда. Дали така написано, ще може да се използва и като модул?

Код:
#!/usr/bin/env python
# Get and print the external IP.

def get_ext_ip(*args):
"""Returns the external IP.
IPv4 only? I don't know. :-D
Default server: ipv4.icanhazip.com"""

import urllib

if len(args) == 2 and (args[1] == '-h' or args[1] == '--help'):
print """
Returns external IP.
Usage:
extip.py [server address (default: ipv4.icanhazip.com)]
extip.py [-h] [--help]
\t\tPrints this help and exit.
Other posible servers:
\thttp://checkip.amazonaws.com/
\thttp://wtfismyip.com
\thttp://checkip.dyndns.com/
\thttp://ipecho.net/plain
\thttp://ifconfig.me
\thttp://smart-ip.net/myip
\thttp://www.telize.com/ip
"""
exit(0)

## If server is given
if len(args) == 2:
url = args[1]
else:
# Default: ipv4.icanhazip.com
url = "http://ipv4.icanhazip.com"

try:
# Attempting to connect
ext_ip = urllib.urlopen(url)
ip = ext_ip.read()
#ext_ip = urllib.urlretrieve(url)
ext_ip.close()
except:
ip = 'localhost'

print "%s" % ip
return ip

def main(*argv):
import sys
if sys.argv:
if len(sys.argv) == 2:
server = sys.argv[1]
else:
server = None
get_ext_ip(server)

if __name__ == '__main__':
main()
« Последна редакция: Юни 16, 2015, 13:30 от 4096bits »
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

runtime

  • Участник
  • *****
  • Публикации: 805
  • Distribution: Ubuntu 14.04
  • Window Manager: Unity
  • LZ1DOT
    • Профил
    • WWW
Re: Публичното IP
« Отговор #1 -: Юни 16, 2015, 12:50 »
Защо просто не изпълниш
Код:
dig +short myip.opendns.com @resolver1.opendns.com

Иначе браво за програмчето :)
« Последна редакция: Юни 16, 2015, 12:53 от runtime »
Активен

4096bits

  • Участник
  • *****
  • Публикации: 3176
    • Профил
Re: Публичното IP
« Отговор #2 -: Юни 16, 2015, 13:32 »
Защо просто не изпълниш
Код:
dig +short myip.opendns.com @resolver1.opendns.com

Иначе браво за програмчето :)
Щото не зная, че мога да изпълня и това.  ::)
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

10101

  • Участник
  • *****
  • Публикации: 323
  • Distribution: GNU LINUX
    • Профил
Re: Публичното IP
« Отговор #3 -: Юни 16, 2015, 16:27 »
curl ifconfig.me/all
http://ifconfig.info/

:))
« Последна редакция: Юни 16, 2015, 16:31 от 10101 »
Активен

А печат ?

4096bits

  • Участник
  • *****
  • Публикации: 3176
    • Профил
Re: Публичното IP
« Отговор #4 -: Юни 16, 2015, 16:55 »
curl ifconfig.me/all
http://ifconfig.info/

:))
Да, преди беше с curl само, но при липса на връзка изкарваше сума ненужни неща. Опитах се да ги прехвърля към /dev/null , но явно изхода от командата не е бил различен от 0, за да не се случва. Не е било грешка.
Виж линка към снимката на панела и ще разбереш :)
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

4096bits

  • Участник
  • *****
  • Публикации: 3176
    • Профил
Re: Публичното IP
« Отговор #5 -: Юни 23, 2015, 22:15 »
Ревизия на горната недоумица. Толкова грешки.... чак ме е срам, ама май възрастта и неписането на код 15 години си казва думата.  ;D

Код:
#!/usr/bin/env python
# Get and print the external IP.

def get_ext_ip(url):
"""Returns the external IP.
IPv4 only? I don't know. :-D
Default server: ipv4.icanhazip.com"""

from urllib import urlopen

try:
# Attempting to connect
# Default: ipv4.icanhazip.com
ext_ip = urllib.urlopen(url)
ip = ext_ip.read()
#ext_ip = urllib.urlretrieve(url)
ext_ip.close()
except:
ip = 'No Internet?'

print "%s" % ip
return ip

def set_server_address():
"""Gets the command line arguments
and set the server address if it's given"""

import sys

usage = """\rUsage:
\r    extip.py [server address (default: ipv4.icanhazip.com)]
\r    extip.py [-h, --help]
\r        Prints this help and quit.
\rOther posible servers:
\r    http://checkip.amazonaws.com/
\r    http://wtfismyip.com
\r    http://checkip.dyndns.com/
\r    http://ipecho.net/plain
\r    http://ifconfig.me
\r    http://smart-ip.net/myip
\r    http://www.telize.com/ip"""

if len(sys.argv) == 2 and ( sys.argv[1] == '-h' or sys.argv[1] == '--help' ):
print "\rReturns external IP."
print usage
sys.exit(0)
elif len(sys.argv) > 2:
print "\rWrong arguments number!"
print usage
sys.exit(0)
elif len(sys.argv) == 2:
server = sys.argv[1]
return server
else:
server = "ipv4.icanhazip.com"
return server

def main():
get_ext_ip(set_server_address())

if __name__ == '__main__':
main()
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

4096bits

  • Участник
  • *****
  • Публикации: 3176
    • Профил
Re: Публичното IP
« Отговор #6 -: Юни 23, 2015, 23:09 »
И това не се получава. Къде бъркам?!
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.

4096bits

  • Участник
  • *****
  • Публикации: 3176
    • Профил
Re: Публичното IP
« Отговор #7 -: Юни 23, 2015, 23:17 »
Пффф! Не трябва да е icanhazip.com, ми http://icanhazip.com
Активен

As they say in Mexico, "Dasvidaniya!" Down there, that's two vidaniyas.