python 多程序 ip段掃瞄

2021-09-28 17:37:17 字數 1906 閱讀 5822

在乙個網段裡,想知道哪個被占用,哪個沒占用。最初筆者非常low的乙個乙個ping去測試,隨後會寫py指令碼了,便寫指令碼去做。可是每次掃瞄都需要等到很長時間。因為最少的網段是1-255,時間長是肯定的。今天給大家分享個高大上的方法,多程序網段掃瞄-速度搜搜的

這裡用到兩個模組,multiprocessing、subprocess,具體功能大家可以google細細了解。

multiprocessing

python中的多執行緒其實並不是真正的多執行緒,如果想要充分地使用多核cpu的資源,在python中大部分情況需要使用多程序。python提供了非常好用的多程序包multiprocessing,只需要定義乙個函式,python會完成其他所有事情。借助這個包,可以輕鬆完成從單程序到併發執行的轉換。multiprocessing支援子程序、通訊和共享資料、執行不同形式的同步,提供了process、queue、pipe、lock等元件。

subprocess

subprocess.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...