Титла: Публичното IP
Публикувано от: 4096bits в 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()
Титла: Re: Публичното IP
Публикувано от: runtime в Jun 16, 2015, 12:50
Защо просто не изпълниш dig +short myip.opendns.com @resolver1.opendns.com Иначе браво за програмчето :)
Титла: Re: Публичното IP
Публикувано от: 4096bits в Jun 16, 2015, 13:32
Защо просто не изпълниш
dig +short myip.opendns.com @resolver1.opendns.com Иначе браво за програмчето :)
Щото не зная, че мога да изпълня и това. ::)
Титла: Re: Публичното IP
Публикувано от: 10101 в Jun 16, 2015, 16:27
curl ifconfig.me/all http://ifconfig.info/
:))
Титла: Re: Публичното IP
Публикувано от: 4096bits в Jun 16, 2015, 16:55
curl ifconfig.me/all http://ifconfig.info/
:))
Да, преди беше с curl само, но при липса на връзка изкарваше сума ненужни неща. Опитах се да ги прехвърля към /dev/null , но явно изхода от командата не е бил различен от 0, за да не се случва. Не е било грешка. Виж линка към снимката на панела и ще разбереш :)
Титла: Re: Публичното IP
Публикувано от: 4096bits в 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()
Титла: Re: Публичното IP
Публикувано от: 4096bits в Jun 23, 2015, 23:09
И това не се получава. Къде бъркам?!
Титла: Re: Публичното IP
Публикувано от: 4096bits в Jun 23, 2015, 23:17
Пффф! Не трябва да е icanhazip.com, ми http://icanhazip.com
|