Accueil > > > PONG V3, UN MASS PINGUEUR PYTHON GPL
PONG V3, UN MASS PINGUEUR PYTHON GPL
Information sur la source
Description
"Pong" est utile pour pinguer des centaines de machines rapidement avec une syntaxe courte... Pong est multithreads, ce qui lui permet de pinguer plusieurs machines en même temps. Comment ca marche ? Basiquement, comme ping : pong 172.16.0.1 Plus spécifiquement : pong 172.16.50,52,54,60.1-25 cette commande ping 100 machines autre exemple : pong 172.16.1,2.1-5:172.20.1,2,3.1-25:192.168.1.1-10 C a donne quoi sur une console ? mymachine% pong 172.16.52.1-10 IP MAC Status Times (ms) 172.16.52.1 0F:14:2F:3F:37:F0 Up 0.247 1.988 172.16.52.2 Down 172.16.52.3 Down 172.16.52.4 Down 172.16.52.5 00:1F:22:FE:AA:FA Up 0.263 0.868 172.16.52.6 00:14:2F:3F:46:F9 Up 0.220 0.730 172.16.52.7 00:1F:22:3F:46:F9 Up 0.226 4.058 172.16.52.8 00:14:2F:3F:46:7F Up 0.238 3.742 172.16.52.9 00:1F:22:3F:68:FF Up 0.256 2.980 172.16.52.10 00:1F:2F:3F:45:5F Up 0.250 1.333 Pong Report : 10 IPs Ponged in : 0h 0m 2s 0909ms 7 Hosts Up 3 Hosts Down 0 Hosts Weird Pong accepte plein d'options d'affichage de sorte à contraindre la sortie ecran à ce que l'on souhaite ... Utile pour créer des logs ... Pong V3.00 est un soft sous licence GPLv3 Développé/Fonctionne sous Python 2.5.1 Paquet DEB pour Debian ou Ubuntu : http://www.kik-it.com/downloads/PYTHON_STUFF/Pon g.deb
Source
- #!/usr/bin/python
- # -*- coding: utf_8 -*-
-
- u"""
- program : Pong V 3.0
- file : pong.py
- author : Frédérick Lemasson < djassper [at] gmail [dot] com >
- licence : GPL v3.0
- created : 2007-08-27
- revised : 2007-09-03
- purpose : Ping lots of IPs (V4) using a single command line and prints a report
- exemple : pong 172.16.1,2.1-5:172.20.1,2,3.1-25:192.168.1.1-10
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details :
-
- http://www.gnu.org/licenses
- http://www.gnu.org/licenses/gpl-3.0.html
- http://www.gnu.org/philosophy/
-
- """
-
- from __future__ import with_statement
- import os
- #import re
- import time
- import sys
- from threading import Thread
- from optparse import OptionParser
- pong=sys.modules['__main__']
-
- usage = u"""
- pong [options] IPCode
-
- IPCode is translated to IPs following the rules :
-
- Special characters you can use in octets (only one per octet) :
- "-" means range, Exemple : 1-5 means 1,2,3,4,5
- "*" means range [0-255]
- "," means list, Exemple : 1,3,12 means 1,3,12
-
- You can use ":" between IPCodes :
- IPCodes exemples : 172.16.1,2.1-5:172.20.1,2,3.1-25
- 192.168.1.*
- 10.1.1.100
-
- Pong Copyright (C) 2007 Frédérick Lemasson - France
- This program comes with ABSOLUTELY NO WARRANTY.
- This is GPL free software, and you are welcome to redistribute it under
- certain conditions. If you Improve/Modify/Debug Pong,
- you ["must" AND "will be happy to"] send me an email.
- for details type "pong --licence".
-
- """
-
- parser = OptionParser(usage)
- #Simple Options
- parser.add_option("-u", "--HideUp", dest="HideUp", action="store_true", default=False, help="Hide Hosts Up")
- parser.add_option("-d", "--HideDown", dest="HideDown", action="store_true", default=False, help="Hide Hosts Down")
- parser.add_option("-w", "--HideWeird", dest="HideWeird", action="store_true", default=False, help="Hide Hosts Weird")
- parser.add_option("-i", "--HideIP", dest="HideIP", action="store_true", default=False, help="Hide IPs from report")
- parser.add_option("-s", "--HideStatus", dest="HideStatus", action="store_true", default=False, help="Hide Status from report")
- parser.add_option("-m", "--HideMAC", dest="HideMAC", action="store_true", default=False, help="Hide MACs from report")
- parser.add_option("-t", "--HideTimes", dest="HideTimes", action="store_true", default=False, help="Hide Times from report")
- parser.add_option("-c", "--HideHeaders", dest="HideHeaders", action="store_true", default=False, help="Don't show the Columns Headers")
- parser.add_option("-r", "--HideReport", dest="HideReport", action="store_true", default=False, help="Don't show the report")
- parser.add_option("-b", "--Beep", dest="Beep", action="store_true", default=False, help="Beeps when a host is either Down or Weird")
- parser.add_option("--licence", dest="licence", action="store_true", default=False, help="Prints Pong Licence informations")
- #Parameter Options
- parser.add_option("-e", "--Exclude", dest="Exclude", metavar="IPCode", help="Exclude IPs from ping list")
- parser.add_option("-f", "--InputFile", dest="InputFile", help="Specify a file containing IPCodes to ping, one IPCode per line")
- parser.add_option("-R", "--Report", dest="Report", help="Build/Update a long term Report")
- parser.add_option("-L", "--Limit", type="int", dest="Limit", help="Sets the long term Report occurences limit")
- parser.add_option("-W", "--Wait", type="int", dest="Wait", default=1, help="Time to wait for a response, in seconds, default is 1s")
-
-
- (options, args) = parser.parse_args()
-
- if options.licence:
- print usage,pong.__doc__
- sys.exit()
-
- if len(args) != 1 and not options.InputFile:
- parser.error("incorrect number of arguments")
-
- ### Functions ###
-
- class NDict(dict):
- """ Customized dict, don't raise KeyError exception, return None instead """
- def __getitem__(self, key):
- if self.has_key(key):
- return dict.__getitem__(self, key)
- else:
- return ""
-
- class Pong(Thread):
- """ Sends pings in parallel using Thread module """
- def __init__ (self,ip):
- Thread.__init__(self)
- self.ip = ip
- self.status = -1
- self.times= ""
- def run(self):
- ping = os.popen("ping -q -c2 -W"+str(options.Wait)+" "+self.ip,"r")
- while 1:
- line = ping.readline()
- if not line: break
- if "," in line and self.status==-1:
- Result = int(line.split(",")[1].strip().split()[0])
- if Result in [0,1,2]: self.status = Result
- if "=" in line and self.times=="":
- Result = line.split("=")[1].strip().split("/")
- self.times = str(Result[0]) + " " +str(Result[2])
-
- def Beep():
- print >> sys.stderr, "\a",
-
- def TimeFrom(StartTime):
- """ Returns Time elapsed between now and given time (returns in format : h m s ms)"""
- StopTime=time.time()
- Took=StopTime - StartTime
- Foo=time.gmtime(Took)
- return str(Foo[3])+"h "+str(Foo[4])+"m "+str(Foo[5])+"s "+str(Took).split(".")[1][:4]+"ms"
-
- def Range2List(TheRange):
- """ Turns octet range user input in python list"""
- TheRange=TheRange.split("-")
- return range(int(TheRange[0]),int(TheRange[1])+1)
-
- def List2List(TheList):
- """ Turns octet list user input in python list"""
- TheCleanList=[]
- for item in TheList.split(","):
- TheCleanList.append(int(item))
- return TheCleanList
-
- def ClearFile(TheFile):
- with open(TheFile,"w") as f:
- f.write("")
-
- def ReadFile(TheFile):
- """ Returns complete text file"""
- with open(TheFile,"rb") as f:
- return f.read()
-
- def WriteFile(TheFile,Content):
- with open(TheFile,"w") as f:
- f.write(Content)
-
- def AppendFile(TheFile,Content):
- with open(TheFile,"a") as f:
- f.write(Content)
-
- def Read2Dic(TheFile):
- key=0
- TheDic={}
- for line in file(TheFile):
- key += 1
- TheDic[str(key)] = line
- return TheDic
-
- def Report2Dic(TheFile):
- TheDic=NDict()
- for line in file(TheFile):
- Data=line.split()
- TheDic[str(Data[0])] = str(" ".join(Data[1:]))
- return TheDic
-
- def Dic2Report(TheDic, TheReport):
- sortedkeys = TheDic.keys()
- sortedkeys.sort()
- #NatSort(sortedkeys)
- with open(TheReport,"a") as f:
- for k in sortedkeys:
- f.write(k+" "+TheDic[k]+"\n")
-
- def GetIPsMAC():
- """ Populate global Dict MACs which contains IP as Key and MAC as Value"""
- global MACs
- arptable = ReadFile("/proc/net/arp")
- for line in arptable.split("\n"):
- if not line: break
- Item=line.split()
- MACs[Item[0]]=Item[3]
-
- def IPCode2List(TheIPCodes):
- """ Used in exclude mode to turn IPCodes into a IPs List"""
- IPCodes=TheIPCodes.split(":")
- TheList=[]
- for IPCode in IPCodes:
- if IPCode=="":continue
- Octets=IPCode.split(".")
-
- for Current in range(len(Octets)):
- if Octets[Current]=="*" : Octets[Current]="0-255" #Broadcast included but ping will zap it, could be handled though
- if Octets[Current].find("-")!=-1: #Octet Codes for a range
- Octets[Current]=Range2List(Octets[Current])
- elif Octets[Current].find(",")!=-1: #Octet codes for a list
- Octets[Current]=List2List(Octets[Current])
- else: #Octet codes for himself
- Octets[Current]=[int(Octets[Current])]
-
- for Octet0 in Octets[0]:
- for Octet1 in Octets[1]:
- for Octet2 in Octets[2]:
- for Octet3 in Octets[3]:
- TheList.append(str(Octet0)+"."+str(Octet1)+"."+str(Octet2)+"."+str(Octet3))
- return TheList
-
-
- ### Variables ###
-
- StartTime=time.time()
- report = ("Down","Weird","Up")
- PingsUp=0
- PingsDown=0
- PingsWeird=0
- MACs=NDict()
- Data=NDict()
-
- if options.Exclude:
- ExclusionList=IPCode2List(options.Exclude)
- else:
- ExclusionList=[]
-
- if options.InputFile:
- IPCodes=ReadFile(options.InputFile).replace("\n",":").split(":")
- else:
- #User input exemple : 172.16.50,52,60.1-25:172.20.150,154.1-20
- IPCodes=args[0].split(":")
-
- if options.Report:
- Report=NDict()
- if os.path.exists(options.Report):
- Report=Report2Dic(options.Report)
- else:
- ClearFile(options.Report)
-
- ### Code ###
-
- if not options.HideHeaders:
- Headers=""
- Headers+="IP".ljust(16) if not options.HideIP else ""
- Headers+="MAC".ljust(19) if not options.HideMAC else ""
- Headers+="Status".ljust(8) if not options.HideStatus else ""
- Headers+="Times (ms)".ljust(18) if not options.HideTimes else ""
- print Headers
-
- for IPCode in IPCodes:
- if IPCode=="":continue
-
- Octets=IPCode.split(".")
-
- for Current in range(len(Octets)):
- if Octets[Current]=="*" : Octets[Current]="0-255" #Broadcast included but ping will zap it, could be handled though
- if Octets[Current].find("-")!=-1: #Octet Codes for a range
- Octets[Current]=Range2List(Octets[Current])
- elif Octets[Current].find(",")!=-1: #Octet codes for a list
- Octets[Current]=List2List(Octets[Current])
- else: #Octet codes for himself
- Octets[Current]=[int(Octets[Current])]
-
- for Octet0 in Octets[0]:
- for Octet1 in Octets[1]:
- for Octet2 in Octets[2]:
- pinglist = []
- Data=NDict()
- #Build complete IPs and send Pings Threads
- for Octet3 in Octets[3]:
- IP = str(Octet0)+"."+str(Octet1)+"."+str(Octet2)+"."+str(Octet3)
- if IP in ExclusionList: continue
- current = Pong(IP)
- pinglist.append(current)
- current.start()
-
- #Join Pings Threads responses / define their status
- for pinged in pinglist:
- pinged.join()
-
- #Set Counters and what to print
- if pinged.status==0:
- PingsDown += 1
- if options.Beep:Beep()
- if options.HideDown:continue
- elif pinged.status==1:
- PingsWeird += 1
- if options.Beep:Beep()
- if options.HideWeird:continue
- elif pinged.status==2:
- PingsUp += 1
- if options.HideUp:continue
- #Populate IP Datas on Status
- Data[pinged.ip]={}
- Data[pinged.ip]["Status"]=report[pinged.status]
- Data[pinged.ip]["Times"]=pinged.times
-
- #Pings Just returned, Populate MACs Dict with fresh arp table
- if not options.HideMAC:GetIPsMAC()
- IPs=Data.keys()
- #ReLoop in last Octet and print results
- for Octet3 in Octets[3]:
- IP = str(Octet0)+"."+str(Octet1)+"."+str(Octet2)+"."+str(Octet3)
- if IP in IPs:
- if not options.HideMAC:Data[IP]["Mac"]=MACs[IP] if MACs[IP]!="00:00:00:00:00:00" else ""
- Line=""
- Line+=IP.ljust(16) if not options.HideIP else ""
- Line+=Data[IP]["Mac"].ljust(19) if not options.HideMAC else ""
- Line+=Data[IP]["Status"].ljust(8) if not options.HideStatus else ""
- Line+=Data[IP]["Times"].ljust(18) if not options.HideTimes else ""
-
- print Line
- if options.Report:
- Infos=Line.split()
- Report[str(Infos[0])]+=" ".join(Infos[1:])+"/"
- #Report[str(Infos[0])]=Report[str(Infos[0])][0:-1]
- if options.Limit:
- #keeps the last options.Limits occurences
- occurences=Report[str(Infos[0])].split("/")
- if len(occurences)-1>options.Limit:
- Report[str(Infos[0])]="/".join(occurences[-options.Limit-1:])
-
-
- if not options.HideReport:
- print ""
- print "Pong Report : "+str(PingsUp+PingsDown+PingsWeird).rjust(8) +" IPs Ponged in :",TimeFrom(StartTime)
- print " "+str(PingsUp).rjust(8)+" Hosts Up"
- print " "+str(PingsDown).rjust(8)+" Hosts Down"
- print " "+str(PingsWeird).rjust(8)+" Hosts Weird"
- print ""
-
- if options.Report:
- ClearFile(options.Report)
- Dic2Report(Report, options.Report)
-
#!/usr/bin/python
# -*- coding: utf_8 -*-
u"""
program : Pong V 3.0
file : pong.py
author : Frédérick Lemasson < djassper [at] gmail [dot] com >
licence : GPL v3.0
created : 2007-08-27
revised : 2007-09-03
purpose : Ping lots of IPs (V4) using a single command line and prints a report
exemple : pong 172.16.1,2.1-5:172.20.1,2,3.1-25:192.168.1.1-10
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details :
http://www.gnu.org/licenses
http://www.gnu.org/licenses/gpl-3.0.html
http://www.gnu.org/philosophy/
"""
from __future__ import with_statement
import os
#import re
import time
import sys
from threading import Thread
from optparse import OptionParser
pong=sys.modules['__main__']
usage = u"""
pong [options] IPCode
IPCode is translated to IPs following the rules :
Special characters you can use in octets (only one per octet) :
"-" means range, Exemple : 1-5 means 1,2,3,4,5
"*" means range [0-255]
"," means list, Exemple : 1,3,12 means 1,3,12
You can use ":" between IPCodes :
IPCodes exemples : 172.16.1,2.1-5:172.20.1,2,3.1-25
192.168.1.*
10.1.1.100
Pong Copyright (C) 2007 Frédérick Lemasson - France
This program comes with ABSOLUTELY NO WARRANTY.
This is GPL free software, and you are welcome to redistribute it under
certain conditions. If you Improve/Modify/Debug Pong,
you ["must" AND "will be happy to"] send me an email.
for details type "pong --licence".
"""
parser = OptionParser(usage)
#Simple Options
parser.add_option("-u", "--HideUp", dest="HideUp", action="store_true", default=False, help="Hide Hosts Up")
parser.add_option("-d", "--HideDown", dest="HideDown", action="store_true", default=False, help="Hide Hosts Down")
parser.add_option("-w", "--HideWeird", dest="HideWeird", action="store_true", default=False, help="Hide Hosts Weird")
parser.add_option("-i", "--HideIP", dest="HideIP", action="store_true", default=False, help="Hide IPs from report")
parser.add_option("-s", "--HideStatus", dest="HideStatus", action="store_true", default=False, help="Hide Status from report")
parser.add_option("-m", "--HideMAC", dest="HideMAC", action="store_true", default=False, help="Hide MACs from report")
parser.add_option("-t", "--HideTimes", dest="HideTimes", action="store_true", default=False, help="Hide Times from report")
parser.add_option("-c", "--HideHeaders", dest="HideHeaders", action="store_true", default=False, help="Don't show the Columns Headers")
parser.add_option("-r", "--HideReport", dest="HideReport", action="store_true", default=False, help="Don't show the report")
parser.add_option("-b", "--Beep", dest="Beep", action="store_true", default=False, help="Beeps when a host is either Down or Weird")
parser.add_option("--licence", dest="licence", action="store_true", default=False, help="Prints Pong Licence informations")
#Parameter Options
parser.add_option("-e", "--Exclude", dest="Exclude", metavar="IPCode", help="Exclude IPs from ping list")
parser.add_option("-f", "--InputFile", dest="InputFile", help="Specify a file containing IPCodes to ping, one IPCode per line")
parser.add_option("-R", "--Report", dest="Report", help="Build/Update a long term Report")
parser.add_option("-L", "--Limit", type="int", dest="Limit", help="Sets the long term Report occurences limit")
parser.add_option("-W", "--Wait", type="int", dest="Wait", default=1, help="Time to wait for a response, in seconds, default is 1s")
(options, args) = parser.parse_args()
if options.licence:
print usage,pong.__doc__
sys.exit()
if len(args) != 1 and not options.InputFile:
parser.error("incorrect number of arguments")
### Functions ###
class NDict(dict):
""" Customized dict, don't raise KeyError exception, return None instead """
def __getitem__(self, key):
if self.has_key(key):
return dict.__getitem__(self, key)
else:
return ""
class Pong(Thread):
""" Sends pings in parallel using Thread module """
def __init__ (self,ip):
Thread.__init__(self)
self.ip = ip
self.status = -1
self.times= ""
def run(self):
ping = os.popen("ping -q -c2 -W"+str(options.Wait)+" "+self.ip,"r")
while 1:
line = ping.readline()
if not line: break
if "," in line and self.status==-1:
Result = int(line.split(",")[1].strip().split()[0])
if Result in [0,1,2]: self.status = Result
if "=" in line and self.times=="":
Result = line.split("=")[1].strip().split("/")
self.times = str(Result[0]) + " " +str(Result[2])
def Beep():
print >> sys.stderr, "\a",
def TimeFrom(StartTime):
""" Returns Time elapsed between now and given time (returns in format : h m s ms)"""
StopTime=time.time()
Took=StopTime - StartTime
Foo=time.gmtime(Took)
return str(Foo[3])+"h "+str(Foo[4])+"m "+str(Foo[5])+"s "+str(Took).split(".")[1][:4]+"ms"
def Range2List(TheRange):
""" Turns octet range user input in python list"""
TheRange=TheRange.split("-")
return range(int(TheRange[0]),int(TheRange[1])+1)
def List2List(TheList):
""" Turns octet list user input in python list"""
TheCleanList=[]
for item in TheList.split(","):
TheCleanList.append(int(item))
return TheCleanList
def ClearFile(TheFile):
with open(TheFile,"w") as f:
f.write("")
def ReadFile(TheFile):
""" Returns complete text file"""
with open(TheFile,"rb") as f:
return f.read()
def WriteFile(TheFile,Content):
with open(TheFile,"w") as f:
f.write(Content)
def AppendFile(TheFile,Content):
with open(TheFile,"a") as f:
f.write(Content)
def Read2Dic(TheFile):
key=0
TheDic={}
for line in file(TheFile):
key += 1
TheDic[str(key)] = line
return TheDic
def Report2Dic(TheFile):
TheDic=NDict()
for line in file(TheFile):
Data=line.split()
TheDic[str(Data[0])] = str(" ".join(Data[1:]))
return TheDic
def Dic2Report(TheDic, TheReport):
sortedkeys = TheDic.keys()
sortedkeys.sort()
#NatSort(sortedkeys)
with open(TheReport,"a") as f:
for k in sortedkeys:
f.write(k+" "+TheDic[k]+"\n")
def GetIPsMAC():
""" Populate global Dict MACs which contains IP as Key and MAC as Value"""
global MACs
arptable = ReadFile("/proc/net/arp")
for line in arptable.split("\n"):
if not line: break
Item=line.split()
MACs[Item[0]]=Item[3]
def IPCode2List(TheIPCodes):
""" Used in exclude mode to turn IPCodes into a IPs List"""
IPCodes=TheIPCodes.split(":")
TheList=[]
for IPCode in IPCodes:
if IPCode=="":continue
Octets=IPCode.split(".")
for Current in range(len(Octets)):
if Octets[Current]=="*" : Octets[Current]="0-255" #Broadcast included but ping will zap it, could be handled though
if Octets[Current].find("-")!=-1: #Octet Codes for a range
Octets[Current]=Range2List(Octets[Current])
elif Octets[Current].find(",")!=-1: #Octet codes for a list
Octets[Current]=List2List(Octets[Current])
else: #Octet codes for himself
Octets[Current]=[int(Octets[Current])]
for Octet0 in Octets[0]:
for Octet1 in Octets[1]:
for Octet2 in Octets[2]:
for Octet3 in Octets[3]:
TheList.append(str(Octet0)+"."+str(Octet1)+"."+str(Octet2)+"."+str(Octet3))
return TheList
### Variables ###
StartTime=time.time()
report = ("Down","Weird","Up")
PingsUp=0
PingsDown=0
PingsWeird=0
MACs=NDict()
Data=NDict()
if options.Exclude:
ExclusionList=IPCode2List(options.Exclude)
else:
ExclusionList=[]
if options.InputFile:
IPCodes=ReadFile(options.InputFile).replace("\n",":").split(":")
else:
#User input exemple : 172.16.50,52,60.1-25:172.20.150,154.1-20
IPCodes=args[0].split(":")
if options.Report:
Report=NDict()
if os.path.exists(options.Report):
Report=Report2Dic(options.Report)
else:
ClearFile(options.Report)
### Code ###
if not options.HideHeaders:
Headers=""
Headers+="IP".ljust(16) if not options.HideIP else ""
Headers+="MAC".ljust(19) if not options.HideMAC else ""
Headers+="Status".ljust(8) if not options.HideStatus else ""
Headers+="Times (ms)".ljust(18) if not options.HideTimes else ""
print Headers
for IPCode in IPCodes:
if IPCode=="":continue
Octets=IPCode.split(".")
for Current in range(len(Octets)):
if Octets[Current]=="*" : Octets[Current]="0-255" #Broadcast included but ping will zap it, could be handled though
if Octets[Current].find("-")!=-1: #Octet Codes for a range
Octets[Current]=Range2List(Octets[Current])
elif Octets[Current].find(",")!=-1: #Octet codes for a list
Octets[Current]=List2List(Octets[Current])
else: #Octet codes for himself
Octets[Current]=[int(Octets[Current])]
for Octet0 in Octets[0]:
for Octet1 in Octets[1]:
for Octet2 in Octets[2]:
pinglist = []
Data=NDict()
#Build complete IPs and send Pings Threads
for Octet3 in Octets[3]:
IP = str(Octet0)+"."+str(Octet1)+"."+str(Octet2)+"."+str(Octet3)
if IP in ExclusionList: continue
current = Pong(IP)
pinglist.append(current)
current.start()
#Join Pings Threads responses / define their status
for pinged in pinglist:
pinged.join()
#Set Counters and what to print
if pinged.status==0:
PingsDown += 1
if options.Beep:Beep()
if options.HideDown:continue
elif pinged.status==1:
PingsWeird += 1
if options.Beep:Beep()
if options.HideWeird:continue
elif pinged.status==2:
PingsUp += 1
if options.HideUp:continue
#Populate IP Datas on Status
Data[pinged.ip]={}
Data[pinged.ip]["Status"]=report[pinged.status]
Data[pinged.ip]["Times"]=pinged.times
#Pings Just returned, Populate MACs Dict with fresh arp table
if not options.HideMAC:GetIPsMAC()
IPs=Data.keys()
#ReLoop in last Octet and print results
for Octet3 in Octets[3]:
IP = str(Octet0)+"."+str(Octet1)+"."+str(Octet2)+"."+str(Octet3)
if IP in IPs:
if not options.HideMAC:Data[IP]["Mac"]=MACs[IP] if MACs[IP]!="00:00:00:00:00:00" else ""
Line=""
Line+=IP.ljust(16) if not options.HideIP else ""
Line+=Data[IP]["Mac"].ljust(19) if not options.HideMAC else ""
Line+=Data[IP]["Status"].ljust(8) if not options.HideStatus else ""
Line+=Data[IP]["Times"].ljust(18) if not options.HideTimes else ""
print Line
if options.Report:
Infos=Line.split()
Report[str(Infos[0])]+=" ".join(Infos[1:])+"/"
#Report[str(Infos[0])]=Report[str(Infos[0])][0:-1]
if options.Limit:
#keeps the last options.Limits occurences
occurences=Report[str(Infos[0])].split("/")
if len(occurences)-1>options.Limit:
Report[str(Infos[0])]="/".join(occurences[-options.Limit-1:])
if not options.HideReport:
print ""
print "Pong Report : "+str(PingsUp+PingsDown+PingsWeird).rjust(8) +" IPs Ponged in :",TimeFrom(StartTime)
print " "+str(PingsUp).rjust(8)+" Hosts Up"
print " "+str(PingsDown).rjust(8)+" Hosts Down"
print " "+str(PingsWeird).rjust(8)+" Hosts Weird"
print ""
if options.Report:
ClearFile(options.Report)
Dic2Report(Report, options.Report)
Conclusion
Si quelqun se sent de faire en sorte que Pong marche sous Windows (pas compliqué il n'y a que la syntaxe/traitement du ping à changer) j'en serai flaté ...
Sources de la même categorie
Commentaires et avis
Discussions en rapport avec ce code source dans le forum
Mac Os X [ par champagnef ]
J'ai installé tout d'abord macpython 2.3. je pouvais accéder à la database par le package manager. Puis ayant Os X.3.5, j'ai installé pythonpanther, m
PyQt sous MacOs [ par thibaultg ]
Bonjour,Voilà, je travaille sous PyQt et jusqu'alors j'étais sous une OpenSuse toute configurée pour moi... j'avais recours à la commande suivante lor
ajout (ou suppression) dynamique d'entrées et de labels avec Tkinter [ par 9uoReverse ]
Bonjour je suis débutant en python , et en programmation d'ailleurs ( je sais faire des batch MS.....désolé) donc voilà mon probleme j'ai fais un pt
customisation des fenetres et bouttons en style mac sur windows [ par barbichou86 ]
Bonjour a tous, Question du jour : connaissez vous un moyen simple et efficace de modifier l'apparence d'une fenêtre windows en style mac (comment il
|
Derniers Blogs
[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7[WP7] AJOUTER DES IMAGES DANS LA MEDIA LIBRARY D'UN WINDOWS PHONE 7 par Audrey
L'émulateur Windows Phone 7, fourni avec la version Beta des outils développeurs n'inclut aucune image dans sa bibliothèque. Pas très pratique de tester son application lorsque l'on souhaite que l'utilisateur puisse choisir une image présente dans le télé...
Cliquez pour lire la suite de l'article par Audrey VIVE LES MOCKS ET LES POCOSVIVE LES MOCKS ET LES POCOS par vLabz
J'observe régulièrement autour de moi de la confusion à propos de ces deux termes et j'aimerais juste rappeler ce qu'ils signifient. Je ne suis bien sûr pas le mieux placé pour faire une leçon mais je vais faire de mon mieux pour mettre en valeur ce q...
Cliquez pour lire la suite de l'article par vLabz [WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5)[WF4] WORKFLOW AND CUSTOM ACTIVITIES - BEST PRACTICES (4/5) par JeremyJeanson
Vendredi dernier Microsoft a publié le quatrième épisode des bonnes pratiques pour coder ses activités custom dans WF4 : endpoint.tv - Workflow and Custom Activities - Best Practices (Part 4) . Tout comme pour les précédents épisodes, j'ai pris le temps d...
Cliquez pour lire la suite de l'article par JeremyJeanson DéVELOPPEMENT MOBILE : .NET COMPACT FRAMEWORK & LIMITATIONSDéVELOPPEMENT MOBILE : .NET COMPACT FRAMEWORK & LIMITATIONS par Pi-R
Introduction :
Le développement d'applications mobiles est quelque peu différent du développement d'applications sous Windows. En effet, le développement d'applications mobiles se base sur le .NET Compact Fra...
Cliquez pour lire la suite de l'article par Pi-R IPHONE VERSUS WP7 CODINGIPHONE VERSUS WP7 CODING par Nicolas
Je relais une présentation sur slideshare.net, qui compare le développement sur Iphone et Windows Phone 7, qui ma fait sourire. I phone versus windows phone 7 coding View more presentations from www.donburnett.com. J'aurais bien aimé une comparai...
Cliquez pour lire la suite de l'article par Nicolas
Logiciels
Xilisoft HD Vidéo Convertisseur 6 (6.0.3.0421)XILISOFT HD VIDéO CONVERTISSEUR 6 (6.0.3.0421)Xilisoft HD Vidéo Convertisseur est un outil professionnel de conversion HDTV, conçu pour transfo... Cliquez pour télécharger Xilisoft HD Vidéo Convertisseur 6 Xilisoft MP4 Convertisseur 6 (6.0.2.0415)XILISOFT MP4 CONVERTISSEUR 6 (6.0.2.0415)Xilisoft MP4 Convertisseur est un outil puissant pour la conversion de vidéo MP4, qui peut conver... Cliquez pour télécharger Xilisoft MP4 Convertisseur 6 Vade Retro Desktop (3.03)VADE RETRO DESKTOP (3.03)Le logiciel antispam Vade Retro pour Microsoft Outlook®, Outlook Express® et Windows Mail®(Vista)... Cliquez pour télécharger Vade Retro Desktop Malwarebytes Anti Malwares (1.46)MALWAREBYTES ANTI MALWARES (1.46)Malwarebytes' Anti-Malware est un anti-malware qui peut éliminer même les plus avancés des logic... Cliquez pour télécharger Malwarebytes Anti Malwares
|