Ping svetainėje?

Bazinis kodas:

 from Tkinter import * import os,sys ana= Tk() def ping1(): os.system('ping') a=Button(pen) ip=("192.168.0.1") a.config(text="PING",bg="white",fg="blue") a=ping1.ip ??? a.pack() ana.mainloop() 

Kaip aš galiu suspausti svetaines ar adresą?

68
25 нояб. nustatė user40572 25 nov. 2008-11-25 12:58 '08, 12:58, 2008-11-25 12:58
@ 13 atsakymų

Žr grynas Python ping Matthew Dixon Cowles ir Jens Diemer . Taip pat atminkite, kad „Python“ reikalauja root, kad paleistų „ICMP“ (t.y. ping) lizdus „Linux“.

 import ping, socket try: ping.verbose_ping('www.google.com', count=3) delay = ping.Ping('www.wikipedia.org', timeout=2000).do() except socket.error, e: print "Ping Error:", e 

verbose_ping kodo lengva skaityti, įkvėpimo ieškokite verbose_ping ir Ping.do

78
25 нояб. atsakymas duotas orp . 2008-11-25 15:39 '08, 15:39, 2008-11-25 15:39

Priklausomai nuo to, ką norite pasiekti, jūs tikriausiai esate paprasčiausias būdas naudoti „ping“ sistemos komandą.

Subproceso modulio naudojimas yra geriausias būdas tai padaryti, nors reikia prisiminti, kad ping komanda skiriasi nuo skirtingų operacinių sistemų!

 import subprocess host = "www.google.com" ping = subprocess.Popen( ["ping", "-c", "4", host], stdout = subprocess.PIPE, stderr = subprocess.PIPE ) out, error = ping.communicate() print out 

Jums nereikia nerimauti dėl korpuso paleidimo simbolių. Pavyzdžiui ..

 host = "google.com; `echo test` 

.. neveiks aido komandos.

Dabar, norėdami gauti ping rezultatus, galite išanalizuoti kintamąjį. Išvesties pavyzdys:

 round-trip min/avg/max/stddev = 248.139/249.474/250.530/0.896 ms 

„Regex“ pavyzdys:

 import re matcher = re.compile("round-trip min/avg/max/stddev = (\d+.\d+)/(\d+.\d+)/(\d+.\d+)/(\d+.\d+)") print matcher.search(out).groups() # ('248.139', '249.474', '250.530', '0.896') 

Vėlgi, nepamirškite, kad išėjimas priklausys nuo operacinės sistemos (ir netgi ping versijos). Tai nėra ideali, tačiau daugeliu atvejų ji veiks gerai (kur žinote mašinas, kuriose veikia scenarijus)

38
25 нояб. atsakymas yra dbr . 2008-11-25 13:49 '08 13:49 pm 2008-11-25 13:49

Jūs galite rasti „ Noah“ dovanų pristatymą. Sukurkite lanksčias komandinės eilutės priemones, naudodami „Python“ . Jame jis apjungia subprocesą, eilę ir sriegį, kad sukurtų sprendimą, galintį vienu metu patikrinti šeimininkus ir paspartinti procesą. Žemiau yra pagrindinė versija, prieš ją pridedant komandų eilutės analizę ir kai kurias kitas funkcijas. Šią versiją ir kitus kodus galite rasti čia.

 #!/usr/bin/env python2.5 from threading import Thread import subprocess from Queue import Queue num_threads = 4 queue = Queue() ips = ["10.0.1.1", "10.0.1.3", "10.0.1.11", "10.0.1.51"] #wraps system ping command def pinger(i, q): """Pings subnet""" while True: ip = q.get() print "Thread %s: Pinging %s" % (i, ip) ret = subprocess.call("ping -c 1 %s" % ip, shell=True, stdout=open('/dev/null', 'w'), stderr=subprocess.STDOUT) if ret == 0: print "%s: is alive" % ip else: print "%s: did not respond" % ip q.task_done() #Spawn thread pool for i in range(num_threads): worker = Thread(target=pinger, args=(i, queue)) worker.setDaemon(True) worker.start() #Place work in queue for ip in ips: queue.put(ip) #Wait until worker threads are done to exit queue.join() 

Jis taip pat yra autorius: „ Python“ „Unix“ ir „Linux“ sistemos administravimas

http://ecx.images-amazon.com/images/I/515qmR%2B4sjL._SL500_AA240_.jpg

37
25 нояб. atsakymą pateikė Ryan Cox lapkričio 25 d. 2008-11-25 15:28 '08, 15:28, 2008-11-25 15:28

Sunku pasakyti, koks jūsų klausimas, bet yra keletas alternatyvų.

Jei norite pažodžiui vykdyti užklausą naudodami „ping ICMP“ protokolą, galite gauti ICMP biblioteką ir tiesiogiai pakviesti užklausą. „Google“ „python icmp “, kad surastų tokius dalykus icmplib . Galbūt norėsite žiūrėti gydymą .

Tai bus daug greičiau nei naudojant os.system("ping " + ip ) .

Jei norite paprastai „ping“ lauką sužinoti, ar jis gali būti naudojamas, galite naudoti echo protokolą 7 prievade.

Už aidą jūs naudojate lizdų biblioteką, kad atidarytumėte IP adresą ir 7 prievadą. Rašote kažką šiame prievade, atsiųskite vežimo grąžinimą ( "\r\n" ) ir tada perskaitykite atsakymą.

Jei norite, kad svetainė būtų pinguota, kad sužinotumėte, ar svetainė veikia, turite naudoti „http“ protokolą 80-iajame prievade.

Jei norite tinkamai patvirtinti žiniatinklio serverį, naudodami urllib2 atidarykite konkretų URL. ( /index.html visada populiarus) ir perskaitykite atsakymą.

Yra dar daugiau galimų „ping“ reikšmių, įskaitant „traceroute“ ir „pirštą“.

10
25 нояб. atsakymą pateikė S.Lott . 2008-11-25 14:12 '08, 14:12 pm, 2008-11-25 14:12

Aš kažką panašaus įkvėpimo:

 import urllib import threading import time def pinger_urllib(host): """ helper function timing the retrival of index.html TODO: should there be a 1MB bogus file? """ t1 = time.time() urllib.urlopen(host + '/index.html').read() return (time.time() - t1) * 1000.0 def task(m): """ the actual task """ delay = float(pinger_urllib(m)) print '%-30s %5.0f [ms]' % (m, delay) # parallelization tasks = [] URLs = ['google.com', 'wikipedia.org'] for m in URLs: t = threading.Thread(target=task, args=(m,)) t.start() tasks.append(t) # synchronization point for t in tasks: t.join() 
7
22 июля '09 в 15:59 2009-07-22 15:59 atsakymą pateikė Harald Schilly, liepos 22 d., 09:15, 2009-07-22 15:59

Štai trumpas fragmentas, naudojant subprocess . „ check_call metodas arba sugrąžina 0 už sėkmę arba išmeta išimtį. Taigi, man nereikia analizuoti ping produkcijos. shlex skirtingiems komandų eilutės argumentams atskirti.

  import subprocess import shlex command_line = "ping -c 1 www.google.comsldjkflksj" args = shlex.split(command_line) try: subprocess.check_call(args,stdout=subprocess.PIPE,stderr=subprocess.PIPE) print "Website is there." except subprocess.CalledProcessError: print "Couldn't get a ping." 
6
19 сент. Atsakymas pateikiamas Moondoggy rugsėjo 19 d 2012-09-19 10:35 '12, 10:35 am 2012-09-19 10:35

skaitykite failo pavadinimą, faile yra viena URL eilutėje, pavyzdžiui:

 http://www.poolsaboveground.com/apache/hadoop/core/ http://mirrors.sonic.net/apache/hadoop/core/ 

naudoti komandą:

 python url.py urls.txt 

gauti rezultatą:

 Round Trip Time: 253 ms - mirrors.sonic.net Round Trip Time: 245 ms - www.globalish.com Round Trip Time: 327 ms - www.poolsaboveground.com 

šaltinio kodas (url.py):

 import re import sys import urlparse from subprocess import Popen, PIPE from threading import Thread class Pinger(object): def __init__(self, hosts): for host in hosts: hostname = urlparse.urlparse(host).hostname if hostname: pa = PingAgent(hostname) pa.start() else: continue class PingAgent(Thread): def __init__(self, host): Thread.__init__(self) self.host = host def run(self): p = Popen('ping -n 1 ' + self.host, stdout=PIPE) m = re.search('Average = (.*)ms', p.stdout.read()) if m: print 'Round Trip Time: %s ms -' % m.group(1), self.host else: print 'Error: Invalid Response -', self.host if __name__ == '__main__': with open(sys.argv[1]) as f: content = f.readlines() Pinger(content) 
3
01 дек. Atsakymas duotas hustljian 01 Dec. 2012-12-01 16:14 '12 at 4:14 pm 2012-12-01 16:14

Čia rasite atnaujintą minėto scenarijaus versiją, kuri veikia tiek „Windows“, tiek „Linux“ .

2
16 нояб. Atsakymas duotas Born To Ride 16 lapkričio. 2009-11-16 15:10 '09, 15:10, 2009-11-16 15:10

Išbandykite Jeremy Hilton kodą, jei reikia atlikti sudėtingesnį, išsamesnį įgyvendinimą „Python“, o ne tik paskambinti „ ping .

1
25 нояб. atsakymą pateikė Brent.Longborough lapkričio 25 d 2008-11-25 14:22 '08 at 14:22 pm 2008-11-25 14:22
 import subprocess as s ip=raw_input("Enter the IP/Domain name:") if(s.call(["ping",ip])==0): print "your IP is alive" else: print "Check ur IP" 
1
06 марта '15 в 13:29 2015-03-06 13:29 atsakymą pateikė Ibrahimas Kasimas kovo 06-15 d. 13:29 2015-03-06 13:29

Naudokite jį bandymui 2.7 python'e ir veikia gerai, ji grąžina ping laiką milisekundėmis, jei sėkmė ir grįžta į klaidą.

 import platform,subproccess,re def Ping(hostname,timeout): if platform.system() == "Windows": command="ping "+hostname+" -n 1 -w "+str(timeout*1000) else: command="ping -i "+str(timeout)+" -c 1 " + hostname proccess = subprocess.Popen(command, stdout=subprocess.PIPE) matches=re.match('.*time=([0-9]+)ms.*', proccess.stdout.read(),re.DOTALL) if matches: return matches.group(1) else: return False 
0
11 апр. atsakymas pateikiamas MSS 11 balandis 2015-04-11 20:10 '15, 20:10, 2015-04-11 20:10

naudojant ping ping komandą priimančiosios sąrašui:

 import re from subprocess import Popen, PIPE from threading import Thread class Pinger(object): def __init__(self, hosts): for host in hosts: pa = PingAgent(host) pa.start() class PingAgent(Thread): def __init__(self, host): Thread.__init__(self) self.host = host def run(self): p = Popen('ping -n 1 ' + self.host, stdout=PIPE) m = re.search('Average = (.*)ms', p.stdout.read()) if m: print 'Round Trip Time: %s ms -' % m.group(1), self.host else: print 'Error: Invalid Response -', self.host if __name__ == '__main__': hosts = [ 'www.pylot.org', 'www.goldb.org', 'www.google.com', 'www.yahoo.com', 'www.techcrunch.com', 'www.this_one_wont_work.com' ] Pinger(hosts) 
0
25 нояб. atsakymą pateikė Corey Goldberg . 2008-11-25 20:12 '08 at 8:12 pm 2008-11-25 20:12

Naudoju ping lars krypties modulį. „Google“ „Python ping pars“ „Lars Strand“ ir rasite daug nuorodų.

0
25 нояб. atsakymą pateikė akr 25 nov. 2008-11-25 15:41 '08, 15:41, 2008-11-25 15:41

Kiti klausimai apie „ arba „ Klauskite“