python多线程ping网络地址

有时候上网比较卡,于是想看看局域网中有哪些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()
在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

转载于:https://my.oschina.net/synelang/blog/10053

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值