PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : mit Python Server anpingen :)http://www.mrunix.de/forums/images/smilies/confused.gif



bluecrystal21
22-08-2010, 08:48
Hallo ihr Lieben,
ich bin neu in eurem Forum und hoffe ihr könntet mir helfen.
ich hab eine Datei geschrieben die aus einer Textdatei die Domäne ausliest.
Nun soll ich die Domäne anpingen hab schon einige Dokumentationen gelesen über das Pingen aber richtig Schlau daraus bin ich nicht geworden. Hätte einer ein Tutorial oder Dokumentation vll über dieses Thema? Hab nämlich kein schimmer wie ich Python sage "Hey ping das an" ^^
Liebe Grüße

bluecrstyal 21

undefined
22-08-2010, 10:46
Siehe http://docs.python.org/library/subprocess.html#module-subprocess


#!/usr/bin/env python

import subprocess

subprocess.call(["ping", "-c3", "74.125.43.106"])

bluecrystal21
22-08-2010, 15:01
woah cool danke bin dir MEGA Dankbar+freu+

John W
22-08-2010, 16:12
Hier gibt es noch ein Modul dafür (ganz unten): http://www.python.org/~jeremy/python.html
ICMP-Verkehr im Allgemeinen: http://code.activestate.com/recipes/409689/
Und noch einige Module, darunter auch ein Ping-Modul: http://freshmeat.net/projects/pynms/

bluecrystal21
23-08-2010, 12:14
jetz bräuchte ich nur noch den Befehl das er Antwortet gibts da auch irgendwas?
Hier der Code
#!/bin/bash
#!/bin/sh
#!/usr/bin/python
import time
import linecache
import subprocess
#
while 1:
datei = open ("datei.ini","r")
lineList = datei.readlines()
datei.close()
print lineList[-4]
subprocess.call(["ping", "-c3", "lineList"])
time.sleep(2)

Nun müsste er Antworten wie beim Normalen Ping hat einer vll ne Idee?
64 bytes from PC (192.0.0.0): icmp_seq=5 ttl=128 time=0.103 ms

sowas in der art

bluecrystal21

jeebee
23-08-2010, 14:25
Also bei mir funktioniert folgender Code:
#!/usr/bin/python
import time
import subprocess
#
while 1:
datei = open ("ping.ini","r")
lineList = datei.readlines()
datei.close()
for ip in lineList:
p=subprocess.Popen(["ping", "-c3", ip], stdout=subprocess.PIPE) # starte ping subprozess
output=p.communicate() # rufe resultat ab
print output[0] # gib stdout aus
time.sleep(2)

HTH jeebee

bluecrystal21
23-08-2010, 14:40
hab Fehler gefunden woran es liegt in der Datei steht nämlich: Consolenname= PC-Name und jetzt muss ich schauen wie ich nur den PCnamen bekomm dann funktioniert es :)

bluecrystal21
23-08-2010, 14:50
Weis einer vll den Befehl? weil wenn ich lineList[-4][-15] eingeb kommt n -.-

jeebee
23-08-2010, 15:01
lineList.split('=') und dann halt den richtigen Teil nehmen.

bluecrystal21
23-08-2010, 15:04
wowowow warte mal...
also du fügst print "ping", lineList.split("=") ein aber was meinst du mit dem richtigen Teil? das hab ich grad nich ganz geblickt Sorry ^^

jeebee
23-08-2010, 15:16
Demo:
>>> "Consolenname=PC-Name".split('=')
['Consolenname', 'PC-Name']

Dann brauchst du halt line.split('=')[1] um PC-Name zu erhalten.

btw: ich seh nicht ganz wie der Code den du gepostet hast überhaupt funktionieren kann, denn was du hast würde ja folgenden Befehl ausführen:
ping -c3 lineList

Alternativ kannst du auch für alle Elemente in der Liste den PC-Namen extrahieren indem du folgendes machst (List Comprehension):
hosts = [ line.split('=')[1] for line in lineList ]

bluecrystal21
23-08-2010, 15:21
mh ich zeig dir mal die Datei warum das NICHT funktioniert mh .. ^^



[ABaClis_Clientexe]
Passlocation=\\Bla\Freigaben
Consolepcname=DAVID-NEU
Consoledomain=blalba

jeebee
23-08-2010, 15:25
also hast du
lineList=['[ABaClis_Clientexe]', 'Passlocation=\\Bla\Freigaben', 'Consolepcname=DAVID-NEU', 'Consoledomain=blalba '] und du willst DAVID-NEU haben:
>>> print lineList[2].split('=')[1]
DAVID-NEU

bluecrystal21
23-08-2010, 15:28
richtig cool danke :D
jetz kommt nur immer: unkown host -.-

bluecrystal21
23-08-2010, 15:32
ping DAVID-NEU

ping: unknown host lineList
ping DAVID-NEU

ping: unknown host lineList

jeebee
23-08-2010, 15:36
kannst du nochmal deinen Code posten? Bitte mit [code]-tags. Das macht das Lesen einfacher.

bluecrystal21
23-08-2010, 15:44
!/bin/bash
#!/bin/sh
#!/usr/bin/python
import time
import linecache
import subprocess
import os
#
while 1:
datei = open ("datei","r")
lineList = datei.readlines()
datei.close()
host=lineList[2].split('=')[1]
print "ping",host
subprocess.call(["ping", "-c4", host])
time.sleep(2)

ich schreib meine Dateien immer im VI ^^

jeebee
23-08-2010, 15:52
Ah jetzt seh ich das Problem: du suchst den Host "DAVID-PC\n" (mit Newline!). Das kannst du beheben indem du
host=lineList[2].strip().split('=')[1] anstelle von
host=lineList[2].split('=')[1] verwendest.

bluecrystal21
23-08-2010, 15:55
juhu vielen vielen dank du bist mein Persönlicher Held :)

bluecrystal21
23-08-2010, 15:58
--- David-Neu ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.396/0.396/0.396/0.000 ms
ping DAVID-NEU
PING David-Neu (192.168.2.104) 56(84) bytes of data.
64 bytes from David-Neu (192.168.2.104): icmp_seq=1 ttl=128 time=0.098 ms

--- David-Neu ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.098/0.098/0.098/0.000 ms
ping DAVID-NEU
PING David-Neu (192.168.2.104) 56(84) bytes of data.
64 bytes from David-Neu (192.168.2.104): icmp_seq=1 ttl=128 time=0.385 ms


kann ich das auch irgendwie machen das der nur:
PING David-Neu (192.168.2.104) 56(84) bytes of data.
64 bytes from David-Neu (192.168.2.104): icmp_seq=1 ttl=128 time=0.385 ms
anzeigt und 2 sekunden sleep macht? =) dann wär ich fertig mit der Arbeit +freu+

jeebee
23-08-2010, 16:22
#!/bin/bash
#!/bin/sh
#!/usr/bin/python
import time
import linecache
import subprocess
import os
#
while 1:
datei = open ("datei","r")
lineList = datei.readlines()
datei.close()
host=lineList[2].strip().split('=')[1]
p=subprocess.Popen(["ping", "-c1", host], stdout=subprocess.PIPE)
output=p.communicate()
outtext=''.join(output[0])
output=outtext.split('\n')
for line in output:
if line.startswith('PING') or line.startswith('64 bytes'):
print line
time.sleep(2)

bluecrystal21
24-08-2010, 08:40
cool Danke du bist ein Schatzi :)