python多线程ping及arpping扫描工具的实现,pythonarpping,这是一个python多线


这是一个python多线程ping和arpping扫描工具实现的源码。

这里还有待修改的地方,例如:希望能扫描一个地址范围,使用IPy模块可以实现对ip地址的处理,实现扫描一个网段的ip,不用像现在实现的这么笨拙。应该有更巧妙的方法。

代码中需要用到的python模块方法有:subprocess、python Queue、python re

#/usr/bin/env python#--encoding=UTF-8--import subprocessfrom threading import Threadfrom Queue import Queueimport renum_ping_threads = 3num_arp_threads = 3in_queue = Queue()out_queue = Queue()#ips = ["10.65.10.50","10.65.10.80"]ips = ["你要扫描的ip范围"]def ping_scan(i,iq,oq):while True:ip = iq.get()print "[*]Thread %s: Pinging %s" % (i,ip)ret = subprocess.call("ping -c 1 %s" % ip,shell = True,stdout = open('/dev/null','w'),stderr = subprocess.STDOUT)if ret == 0:print "[*]%s: is alive." % ipoq.put(ip)else:print "[*]%s: did not respond" % ipiq.task_done()def arping_scan(i,oq):while True:ip = oq.get()p = subprocess.Popen("arping -c 1  %s" % ip,shell = True,stdout = subprocess.PIPE)out = p.stdout.read()result = out.split()pattern = re.compile(".*:.*:.*")macaddr = Nonefor item in result:if re.search(pattern,item):macaddr = itemprint "[*]IP Address: %s | Mac Address: %s" % (ip,macaddr)oq.task_done()#www.iplaypy.comfor ip in ips:in_queue.put(ip)for i in range(num_ping_threads):worker = Thread(target = ping_scan,args = (i,in_queue,out_queue))worker.setDaemon(True)worker.start()for i in range(num_arp_threads):worker = Thread(target = arping_scan,args = (i,out_queue))worker.setDaemon(True)#        worker.Daemon = Trueworker.start()print "[*]Main Thread Waiting."in_queue.join()out_queue.join()print "[*]Done!"

python ping相关文章推荐:
Python pexpect包应用之快速多线程ping测试;
python实现多线程Ping网段方法源码

编橙之家文章,

评论关闭