在第二層主機發現中,除了使用arping命令外,還可以使用Kali下自帶的一個工具————netdiscover,
netdiscover是一個專門用于二層主機發現的工具,它有兩種掃描方式:主動掃描和被動掃描,其中,主動掃描的原理就是對外發送ARP廣播,操作也很簡單,例如,我本機的IP所在的網段為192.168.80.0/24,我要掃描我這個網段的存活主機,指令為netdiscover -r 192.168.80.0/24 這里的掃描引數為r,被動掃描的原理是將我們自己機器的網卡設定為混雜模式,接受網路中的ARP廣播,被動掃描相比主動掃描的好處是被動掃描可以隱蔽自己,操作指令為netdiscover -p,如下所示:

介紹完工具之后,我們來用python實作一下這個功能,與之前利用python模塊subprocess發送arping命令不同是,這次我們使用python下的另外一個模塊————scapy,
scapy模塊的優勢在于可以自由的去構造一系列的報文,并通過scapy發送出去,再接識訓應,另外scapy模塊對接收到的回應只做解碼,而不做解釋,它只會如實顯示回應的報文,不會去提供分析的結論,至于判斷和利用都由我們自己來決定,,并且scapy可以在二、三、四層作業,
先上代碼
import os
import time
from scapy.all import *
from threading import Thread
from optparse import OptionParser
def sweep(ip):
try:
pakt=Ether(dst="ff:ff:ff:ff:ff:ff",src="")/ARP(
hwsrc="",psrc="",hwdst="00:00:00:00:00:00",pst=ip
)
#src源mac,hwsrc源mac,psrc寫源ip
if result:
time.sleep(0.1)
print ip,'在線'
return
except:
return
def main():
usage="Usage: %prog -f <filename> -i <ip address>"
parser=OptionParser(usage=usage)
parser.add_option("-f","--file",type="string",dest="filename",help=
"specify the IP address file")
parser.add_option("-i","--ip",type="string",dest="address",help=
"specify the IP address")
(options,args)=parser.parse_args()
filename=options.filename
address=options.address
if(filename == None and address == None):
print "請指定IP串列檔案或者IP地址"
sys.exit()
if filename:
if not os.path.exists(filename):
print "指定檔案不存在,請重新輸入"
sys.exit()
f=open(filename,"r")
for i in f.readlines():
ip = i.strip("\n")
t=Thread(target=sweep,args=(ip,))
t.start()
if address:
prefix=address.split(".")[0]+"."+address.split(".")[1]+"."+address.split(".")[2]+"."
for i in range(1,255):
ip=prefix+str(i)
t=Thread(target=sweep,args=(ip,))
t.start()
if __name__=='__main__':
main()
代碼的一些解釋
1.sweep()函式中是這個腳本的主要功能,我們通過scapy構造一個ARP廣播包,dst為目的mac地址,這里由于我們要發現主機,所以填寫廣播地址ff:ff:ff:ff:ff:ff ,src為本機的mac地址,可以不填寫,hwsrc同樣為本機的mac地址,psrc為本機的ip地址,hwdst為被攻擊的mac地址,這里保持默認就好,
2.verbose=0的作用是不反饋各種資訊,如果不加這條,會回傳很多影響我們判斷的資訊,建議寫上,
3.-f選項是讀取檔案,-i選項是選擇ip地址
4.readlines()方法是一次性把內容都讀取到記憶體中,當檔案很大時,可能會導致記憶體不夠用,要讀取大檔案的話,一般是一行一行的讀,
如 f=open('password.txt')
for i in f:
print i.strip()
...
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/21034.html
標籤:其他
下一篇:Unity輸入法相關(IME)
