溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

通過python對本局域網(wǎng)進(jìn)行ARP掃描

發(fā)布時(shí)間:2020-06-19 02:06:44 來源:網(wǎng)絡(luò) 閱讀:3981 作者:hello_world007 欄目:編程語言
#!/usr/local/bin/python3
"""
對本局域網(wǎng)進(jìn)行ARP掃描 ARP (Address Resolution Protocol,ARP);

以太網(wǎng)MAC地址識別(如下):
主機(jī)在整個(gè)局域網(wǎng)廣播ARP請求消息,該ARP請求中包含目標(biāo)設(shè)備的IP地址;
局域網(wǎng)上的每一臺設(shè)備都會檢查該ARP請求,看該ARP請求中的IP地址是不是自己;
只有符合該IP地址的設(shè)備才會發(fā)送ARP響應(yīng);
ARP響應(yīng)該中包涵了ARP請求中的IP地址及對應(yīng)的MAC地址;
"""
"""
這里需要Scapy這個(gè)模塊
https://pypi.org/project/  去這里下載scapy
或者去它官網(wǎng)https://scapy.net/ 下載

Scapy是一個(gè)功能強(qiáng)大的交互式包操作程序.它能夠偽造或解碼大量的協(xié)議包,
還有能發(fā)送,捕獲,匹配及回復(fù)各種大量的協(xié)議包.它還能輕松的處理大量的經(jīng)典任務(wù),
如掃描,跟蹤,探測,單元測試,×××或網(wǎng)斷掃描;
并且它還能處理其它其它工具所無法處理的任務(wù),如發(fā)送無效幀及注入自己的802.11幀,
還有一些結(jié)合技術(shù)(如VLAN跳轉(zhuǎn)+ARP緩存中毒,WEP加密信道上的VoIP解碼等),總之就是很強(qiáng)大

執(zhí)行本腳本時(shí) ,如果需要用sudo來執(zhí)行
"""

"""
ls() 列出所有的協(xié)議及協(xié)議選項(xiàng)
lsc()  列出所有scapy的命令函數(shù)
"""

"""
/操作符在兩層之間起到一個(gè)組合的作用。當(dāng)使用該操作符時(shí),下層可以根據(jù)其上層,使它的一個(gè)或多個(gè)默認(rèn)字段被重載。
本例中需要用的下面幾個(gè)函數(shù)
>>>ls(Ether)
dst        : DestMACField                        = (None)
src        : SourceMACField                      = (None)
type       : XShortEnumField                     = (36864)
#dst  目標(biāo)mac地址  6字節(jié) 48位  dst設(shè)置為ff:ff:ff:ff:ff:ff 為廣播設(shè)置
#src  源mac地址    6字節(jié) 48位
#type  以太網(wǎng)類型,用于標(biāo)識上一層使用的是什么協(xié)議;比如0800是IP協(xié)議,0806是ARP協(xié)議,8035是RARP協(xié)議

>>>ls(ARP)
hwtype     : XShortField                         = (1)
ptype      : XShortEnumField                     = (2048)
hwlen      : FieldLenField                       = (None)
plen       : FieldLenField                       = (None)
op         : ShortEnumField                      = (1)
hwsrc      : MultipleTypeField                   = (None)
psrc       : MultipleTypeField                   = (None)
hwdst      : MultipleTypeField                   = (None)
pdst       : MultipleTypeField                   = (None)
#hwtype 硬件地址的類型,硬件地址不只以太網(wǎng)一種,是以太網(wǎng)類型時(shí)此值為1
#ptype 標(biāo)識上一層使用的是什么協(xié)議
#op 是操作類型字段,值為1,表示進(jìn)行ARP請求;值為2,表示進(jìn)行ARP應(yīng)答;值為3,表示進(jìn)行RARP請求;值為4,表示進(jìn)行RARP應(yīng)答。
#hwsrc 源mac地址
#psrc 源ip地址
#hwdst 目標(biāo)mac地址
#pdst 目標(biāo)ip地址

>>> srp1(pkt,timeout=1,verbose=0 )
#srp1 在第二層協(xié)議上發(fā)送及接收包并返回第一次的應(yīng)答
#pkt       構(gòu)建包的變量
#timeout=1 超時(shí)1秒就丟棄,實(shí)際時(shí)間看程序處理能力而定
#verbose=0 不顯示詳細(xì)信息

"""
from scapy.all import *
import sys,getopt,socket

def get_local_net():
    #獲取主機(jī)名
    hostname = socket.gethostname()
    #獲取主機(jī)的局域網(wǎng)ip
    localip = socket.gethostbyname(hostname)
    localipnums = localip.split('.')
    localipnums.pop()
    localipnet = '.'.join(localipnums)
    return localipnet

def get_vlan_ip_and_mac():
    localnet = get_local_net()
    result = []
    for ipFix in range(1,254):
        ip =localnet+"."+str(ipFix)
        #組合協(xié)議包
        arpPkt=Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=ip)
        res = srp1(arpPkt,timeout=1,verbose=0)
        if res:
            result.append({"localIP":res.psrc,"mac":res.hwsrc})
    return result

result = get_vlan_ip_and_mac()

print(result)
向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI