python多線程ping和arpping掃描工具

jopen 9年前發布 | 5K 次閱讀 Python

#/usr/bin/env python

--encoding=UTF-8--

a simpl ping scaner

import subprocess from threading import Thread from Queue import Queue import re

num_ping_threads = 3 num_arp_threads = 3 in_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." % ip oq.put(ip) else: print "[*]%s: did not respond" % ip iq.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 = None for item in result: if re.search(pattern,item): macaddr = item print "[]IP Address: %s | Mac Address: %s" % (ip,macaddr) oq.task_done()

for 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 = True

worker.start()

print "[*]Main Thread Waiting." in_queue.join() out_queue.join()

print "[*]Done!"</pre>

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!