有时候上网比较卡,于是想看看局域网中有哪些ip是出于活动状态。用python实现了下,简单的多线程调用操作系统的ping.exe,代码如下:
Python语言 : 临时自用代码
import
os
import re
import time
import sys
from threading import Thread
aliveInfo = re . compile( r" Received = 1")
status = ( "No response" , "Partial Response" , "Alive")
class IpAddr( Thread ):
def __init__( self , ip ):
Thread . __init__( self)
self . ip = ip
self . status = 0
def run( self ):
pingaling = os . popen( "ping -n 1 " + self . ip , "r")
while 1 :
line = pingaling . readline()
if not line :
break;
igot = re . findall( aliveInfo , line)
if igot :
self . status = 2
class LifeIp() :
def __init__( self) :
self . pingList = []
try :
ip_conf_file = open( "ip_conf.txt" , 'r')
except :
self . startIp = ''
self . endIp = ''
else :
for line in ip_conf_file :
conf_item = line . replace( ' \n ' , '') . split( '=')
if 'start_ip' in conf_item :
self . startIp = conf_item [ 1 ]
else :
self . endIp = conf_item [ 1 ]
def getStatus( self) :
start_ip_items = self . startIp . split( '.')
end_ip_items = self . endIp . split( '.')
for first in range( int( start_ip_items [ 0 ]), int( end_ip_items [ 0 ]) + 1) :
for second in range( int( start_ip_items [ 1 ]), int( end_ip_items [ 1 ]) + 1) :
for third in range( int( start_ip_items [ 2 ]), int( end_ip_items [ 2 ]) + 1) :
for four in range( int( start_ip_items [ 3 ]), int( end_ip_items [ 3 ]) + 1) :
ip = str( first) + '.' + str( second) + '.' + str( third) + '.' + str( four)
pingIp = IpAddr( ip)
self . pingList . append( pingIp)
pingIp . start()
def showStatus( self) :
for pingIp in self . pingList :
pingIp . join()
print pingIp . ip + ' : ' + status [ pingIp . status ]
if __name__ == '__main__' :
print time . ctime()
ci = LifeIp()
ci . getStatus()
ci . showStatus()
import re
import time
import sys
from threading import Thread
aliveInfo = re . compile( r" Received = 1")
status = ( "No response" , "Partial Response" , "Alive")
class IpAddr( Thread ):
def __init__( self , ip ):
Thread . __init__( self)
self . ip = ip
self . status = 0
def run( self ):
pingaling = os . popen( "ping -n 1 " + self . ip , "r")
while 1 :
line = pingaling . readline()
if not line :
break;
igot = re . findall( aliveInfo , line)
if igot :
self . status = 2
class LifeIp() :
def __init__( self) :
self . pingList = []
try :
ip_conf_file = open( "ip_conf.txt" , 'r')
except :
self . startIp = ''
self . endIp = ''
else :
for line in ip_conf_file :
conf_item = line . replace( ' \n ' , '') . split( '=')
if 'start_ip' in conf_item :
self . startIp = conf_item [ 1 ]
else :
self . endIp = conf_item [ 1 ]
def getStatus( self) :
start_ip_items = self . startIp . split( '.')
end_ip_items = self . endIp . split( '.')
for first in range( int( start_ip_items [ 0 ]), int( end_ip_items [ 0 ]) + 1) :
for second in range( int( start_ip_items [ 1 ]), int( end_ip_items [ 1 ]) + 1) :
for third in range( int( start_ip_items [ 2 ]), int( end_ip_items [ 2 ]) + 1) :
for four in range( int( start_ip_items [ 3 ]), int( end_ip_items [ 3 ]) + 1) :
ip = str( first) + '.' + str( second) + '.' + str( third) + '.' + str( four)
pingIp = IpAddr( ip)
self . pingList . append( pingIp)
pingIp . start()
def showStatus( self) :
for pingIp in self . pingList :
pingIp . join()
print pingIp . ip + ' : ' + status [ pingIp . status ]
if __name__ == '__main__' :
print time . ctime()
ci = LifeIp()
ci . getStatus()
ci . showStatus()
在ip_conf.txt中配置需要检测的ip地址段:
start_ip=192.168.1.100
end_ip=192.168.1.120
运行效果如下:
192.168.1.100 : No response
192.168.1.101 : No response
192.168.1.102 : No response
192.168.1.103 : No response
192.168.1.104 : No response
192.168.1.105 : No response
192.168.1.106 : Alive
192.168.1.107 : No response
192.168.1.108 : No response
192.168.1.109 : No response
192.168.1.110 : No response
192.168.1.111 : No response
192.168.1.112 : No response
192.168.1.113 : No response
192.168.1.114 : No response
192.168.1.115 : No response
192.168.1.116 : No response
192.168.1.117 : No response
192.168.1.118 : No response
192.168.1.119 : No response
192.168.1.120 : No response