在乙個網段裡,想知道哪個被占用,哪個沒占用。最初筆者非常low的乙個乙個ping去測試,隨後會寫py指令碼了,便寫指令碼去做。可是每次掃瞄都需要等到很長時間。因為最少的網段是1-255,時間長是肯定的。今天給大家分享個高大上的方法,多程序網段掃瞄-速度搜搜的
這裡用到兩個模組,multiprocessing、subprocess,具體功能大家可以google細細了解。
multiprocessingpython中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核cpu的資源,在python中大部分情況需要使用多程序。python提供了非常好用的多程序包multiprocessing,只需要定義乙個函式,python會完成其他所有事情。借助這個包,可以輕鬆完成從單程序到併發執行的轉換。multiprocessing支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。
subprocesssubprocess.call()父程序等待子程序完成返回退出資訊returncode,相當於exit code.
#!/usr/bin/python
# -*- coding: utf-8 -*-
#多程序掃瞄網段
import multiprocessing
import subprocess
# ping 網段ip
def ping_host(activeq,notactiveq,ipaddr):
#ping -c1 -w1 中-c1是指ping的次數,-w是指執行的最後期限,也就是執行的時間,單位為秒
if subprocess.call('ping -c1 -w 1 %s > /dev/null' % ipaddr, shell=true) != 0:
activeq.put(ipaddr)
else:
notactiveq.put(ipaddr)
#讀取佇列資料
def read(q):
while true:
if not q.empty():
value = q.get(true)
print value
else:
break
#掃瞄ip主函式
if __name__ == '__main__':
#建立程序間通訊佇列
manager = multiprocessing.manager()
activeq = manager.queue()
notactiveq = manager.queue()
process_number = 4
host_list =
for ipnum in range(1, 255):
#建立程序池
pool = multiprocessing.pool(processes=process_number)
for ipaddr in host_list:
pool.close()
pool.join()
#輸出正在使用ip
read(activeq)
#輸出未被使用ip
read(notactiveq)
初版在傳入乙個c類位址,使用了很low的for迴圈去創造乙個位址池。後經過高人點撥,有個現成的模組可以直接生成,而且支援掩碼很是方便。
首先安裝pip
pip install netaddr
from netaddr import ipnetwork
host_list=ipnetwork('192.168.1.0/24')
python實現多程序ping掃瞄
注意 scapy在windows下需要安裝npcap,使用的python版本是3.8 如下 首先匯入所需要的模組 import ipaddress import multiprocessing import time from scapy.allimport from random import r...
python多程序 python多程序
當有多個非相關任務需要處理時,並行能大大提高處理速度。這裡簡要介紹python的multiprocessing模組。簡單多程序編寫 當我們任務數量確定而且比較少的時候,可以手動為每個任務指定乙個程序來執行。import multiprocessing as mp def f a print a if...
bat多程序掃瞄網段
所謂掃瞄,ping主機而已。當然對禁ping了的主機肯定是掃瞄不出來了。網上掃瞄網段的指令碼已經多如牛毛了。此指令碼獨特在幾乎同時啟用多個ping 程序而不是等ping結束後再啟用另乙個。所以速度相對較快。還有乙個缺陷是只能掃瞄24位主機,因為沒編寫解析ip和網段的 scannet.cmd echo...