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

4096bits

  • Напреднали
  • *****
  • Публикации: 3438
    • Профил
Публичното IP
« -: Jun 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()
« Последна редакция: Jun 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 -: Jun 16, 2015, 12:50 »
Защо просто не изпълниш
Код:
dig +short myip.opendns.com @resolver1.opendns.com

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

4096bits

  • Напреднали
  • *****
  • Публикации: 3438
    • Профил
Re: Публичното IP
« Отговор #2 -: Jun 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

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

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

А печат ?

4096bits

  • Напреднали
  • *****
  • Публикации: 3438
    • Профил
Re: Публичното IP
« Отговор #4 -: Jun 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

  • Напреднали
  • *****
  • Публикации: 3438
    • Профил
Re: Публичното IP
« Отговор #5 -: Jun 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

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

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

4096bits

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

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