Python: ping网段内所有ip并返回结果
2014-07-02 12:34
405 查看
今天用Python写了一段小代码,实现的功能是ping某一个网段的所有ip,然后将ping的结果提取出来,输出可以ping通的ip以及往返时间。
初学Python,写得简陋,各位大侠多多指教。
正则表达式请根据自己的系统进行调整,我这个是中文win7下的结果
Python3.3下测试没问题
ping测试的过程中内存占用较大,不知道可以怎么改进
__author__ = 'wucl'
import subprocess, re, _thread, queue, time, threading
print('Ping Processing, Please Wait...')
regex=re.compile('最短 = (\d+)ms,最长 = (\d+)ms,平均 = (\d+)ms')
ipPrefix='192.168.1.'
decoding='gbk'
def ping(ip):
p=subprocess.Popen(['ping.exe',ip],stdout=subprocess.PIPE)
out=p.stdout.read()
result=regex.findall(out.decode(decoding))
if result:
printQueue.put('%15s 最短=%2dms,最长=%2dms,平均=%2dms' %(ip,int(result[0][0]),int(result[0][1]),int(result[0][2])))
return (ip,result[0])
def resultPrint(printQueue):
while True:
try:
data=printQueue.get()
except queue.Empty:
pass
else:
with safeprint:
print(data)
printQueue=queue.Queue()
safeprint=_thread.allocate_lock()
thread=threading.Thread(target=resultPrint,args=(printQueue,))
thread.daemon=True
thread.start()
waitfor=[]
for i in range(1,255):
ip=ipPrefix+str(i)
thread=threading.Thread(target=ping,args=(ip,))
waitfor.append(thread)
thread.start()
for thread in waitfor:
thread.join()
print('Ping End.')
input('Press Enter to quit.')
初学Python,写得简陋,各位大侠多多指教。
正则表达式请根据自己的系统进行调整,我这个是中文win7下的结果
Python3.3下测试没问题
ping测试的过程中内存占用较大,不知道可以怎么改进
__author__ = 'wucl'
import subprocess, re, _thread, queue, time, threading
print('Ping Processing, Please Wait...')
regex=re.compile('最短 = (\d+)ms,最长 = (\d+)ms,平均 = (\d+)ms')
ipPrefix='192.168.1.'
decoding='gbk'
def ping(ip):
p=subprocess.Popen(['ping.exe',ip],stdout=subprocess.PIPE)
out=p.stdout.read()
result=regex.findall(out.decode(decoding))
if result:
printQueue.put('%15s 最短=%2dms,最长=%2dms,平均=%2dms' %(ip,int(result[0][0]),int(result[0][1]),int(result[0][2])))
return (ip,result[0])
def resultPrint(printQueue):
while True:
try:
data=printQueue.get()
except queue.Empty:
pass
else:
with safeprint:
print(data)
printQueue=queue.Queue()
safeprint=_thread.allocate_lock()
thread=threading.Thread(target=resultPrint,args=(printQueue,))
thread.daemon=True
thread.start()
waitfor=[]
for i in range(1,255):
ip=ipPrefix+str(i)
thread=threading.Thread(target=ping,args=(ip,))
waitfor.append(thread)
thread.start()
for thread in waitfor:
thread.join()
print('Ping End.')
input('Press Enter to quit.')
相关文章推荐
- Python: ping网段内所有ip并返回结果
- python 批量ping一个网段 返回结果 的程序
- ping 网段 内 所有的IP 地址
- shell 脚本:ping一个网段的所有ip 和 隔一秒显示当前的时间
- Python获取网段内ping通IP
- ping某一个网段内的所有在用IP 并用颜色标出
- 如何ping同一个网段内的所有在用IP
- 一行命令 Ping 网段所有 IP
- shell脚本ping网段所有IP
- pyqt 批量ping一个网段 返回结果 的程序 (加了个界面 效果不理想)
- 行命令 Ping 网段所有 IP
- 查网段中所有使用的IP
- python socket bind机器上所有ip的方法
- 批处理文件-循环ping多个ip并自动分别保存通及不t通的ip的结果
- Win7系统ping所有的ip都提示”PING:传输失败General failure
- Win7系统ping所有的ip都提示”PING:传输失败。General failure
- python 返回 字典型结果集
- python运行shell命令并得到返回结果(比C++方便多了)
- python调用linux shell脚本,并返回结果一例
- [shell]通过ping检测整个网段IP的网络状态脚本