最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

python使用scapy模塊實(shí)現(xiàn)ARP掃描的過程

 更新時(shí)間:2021年01月21日 14:32:57   作者:怪味巧克力  
這篇文章主要介紹了python使用scapy模塊實(shí)現(xiàn)ARP掃描的過程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

前言

上篇文章主要寫了利用scapy實(shí)現(xiàn)ping掃描,這篇文章主要是利用scapy模塊實(shí)現(xiàn)內(nèi)網(wǎng)ARP掃描

實(shí)現(xiàn)過程

上篇文章中介紹了通過scapy來偽造包,那么ARP包的偽造過程這里不再詳述,說一工具的簡單整體流程

1.首先,實(shí)現(xiàn)單個(gè)IP的ARP包的發(fā)送和接收

2.其次,實(shí)現(xiàn)多進(jìn)程同時(shí)多個(gè)ARP包的發(fā)送和接收

整體的實(shí)現(xiàn)流程與上個(gè)腳本的實(shí)現(xiàn)較為相似

單進(jìn)程ARP包

包的構(gòu)造:

def scapy_arp_one(ip_address, queue=None):
 Packet = Ether(dst='FF:FF:FF:FF:FF:FF') / ARP(op=1, hwdst='00:00:00:00:00:00:', pdst=ip_address)

請(qǐng)求包的發(fā)送:

arp = srp(Packet, timeout=0.2, verbose=False)

返回包的接收

try:
  reply_list = arp[0].res
  if queue is None:
   return reply_list[0][1].getlayer(ARP).fields['hwsrc']
  else:
   queue.out((ip_address, reply_list[0][1].getlayer(ARP).fields['hwsrc']))
 except:
  return

這里采用隊(duì)列的模式,主要是為了后面多進(jìn)程同時(shí)發(fā)送做準(zhǔn)備,涉及到ARP包的接受。這里我簡單描述一下ARP包接受的情況,當(dāng)我們發(fā)送ARP廣播包的之后,我們就會(huì)接受到一個(gè)返回包。所以正確的情況就是,一個(gè)發(fā)送包一個(gè)接收包,一個(gè)發(fā)送包一個(gè)接收包,所以這里采用隊(duì)列的方式,一個(gè)一個(gè)IP地址的接收,并使用列表進(jìn)行存儲(chǔ),然后過濾ARP把內(nèi)容,接收ARP中的硬件MAC地址

完整代碼:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:Ameng, jlx-love.com

from scapy.all import *
import sys


def scapy_arp_one(ip_address, queue=None):
 Packet = Ether(dst='FF:FF:FF:FF:FF:FF') / ARP(op=1, hwdst='00:00:00:00:00:00:', pdst=ip_address)
 arp = srp(Packet, timeout=0.2, verbose=False)
 try:
  reply_list = arp[0].res
  if queue is None:
   return reply_list[0][1].getlayer(ARP).fields['hwsrc']
  else:
   queue.out((ip_address, reply_list[0][1].getlayer(ARP).fields['hwsrc']))
 except:
  return

if __name__ == '__main__':
 scapy_arp_one(sys.argv[1])

進(jìn)一步完善

那么既然我們已經(jīng)了解了使用ARP進(jìn)行基本的發(fā)包和收包,那么我們接下來就來編寫一個(gè)能夠掃描整個(gè)網(wǎng)段的ARP檢測(cè)

理一下思路,首先,我們需要將ip地址編程一個(gè)網(wǎng)段中的所有ip,可以借助ipaddress模塊實(shí)現(xiàn),其次我們知道我們接收響應(yīng)包是一對(duì)的,所以我們可以從一對(duì)一對(duì)的響應(yīng)包中接收我們需要的目標(biāo)IP和源MAC地址,其次就是優(yōu)化代碼,輸出結(jié)果,這里我不再采用sys模塊進(jìn)行傳參,而是采用一個(gè)新的模塊optparse,具體使用方法可以百度百科

完整代碼:

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# Author:Ameng, jlx-love.com

import time
from scapy.all import *
import ipaddress
import optparse


def scapy_arp_scan(network, ifname):
 net = ipaddress.ip_network(network)
 ip_addr = []
 for ip in net:
  ip = str(ip)
  ip_addr.append(ip)
 time.sleep(1)
 Packet = Ether(dst='FF:FF:FF:FF:FF:FF')/ARP(op=1, hwdst='00:00:00:00:00:00', pdst=ip_addr)
 arp = srp(Packet, iface = ifname, timeout = 1, verbose = False)
 arp_list = arp[0].res
 IP_MAC_LIST = []
 for n in range(len(arp_list)):  
  IP = arp_list[n][1][1].fields['psrc']
  MAC = arp_list[n][1][1].fields['hwsrc']
  IP_MAC = [IP, MAC]
  IP_MAC_LIST.append(IP_MAC)
 return IP_MAC_LIST


if __name__ == '__main__':
 t1 = time.time()
 parser = optparse.OptionParser('用法:\n python3 scapy_arp_scan.py --network 掃描網(wǎng)段 --ifname 網(wǎng)卡名稱')
 parser.add_option('--network', dest = 'network', type = 'string', help = '掃描網(wǎng)段')
 parser.add_option('--ifname', dest = 'ifname', type = 'string', help = '網(wǎng)卡名稱')
 (options, args) = parser.parse_args()
 network = options.network
 ifname = options.ifname
 if network == None or ifname == None:
	 print(parser.usage)
 else:
  active_ip_mac = scapy_arp_scan(network, ifname)
  print('存活的IP地址及對(duì)應(yīng)MAC:')
  for ip, mac in active_ip_mac:
   print(ip, mac)
 t2 = time.time()
 print('所用時(shí)間為:{}'.format(int(t2 - t1)))

運(yùn)行結(jié)果

到此這篇關(guān)于python使用scapy模塊實(shí)現(xiàn)ARP掃描的過程的文章就介紹到這了,更多相關(guān)python實(shí)現(xiàn)ARP掃描內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python中將字典形式的數(shù)據(jù)循環(huán)插入Excel

    python中將字典形式的數(shù)據(jù)循環(huán)插入Excel

    這篇文章主要介紹了python中將字典形式的數(shù)據(jù)循環(huán)插入Excel的方法,需要的朋友可以參考下
    2018-01-01
  • Python臨時(shí)文件創(chuàng)建之tempfile模塊介紹

    Python臨時(shí)文件創(chuàng)建之tempfile模塊介紹

    這篇文章主要介紹了Python臨時(shí)文件創(chuàng)建之tempfile模塊,Python的tempfile模塊是用來創(chuàng)建臨時(shí)文件或者文件夾的跨平臺(tái)工具,下面關(guān)于模塊簡單介紹需要的小伙伴可以參考一下
    2022-03-03
  • Python中sys.argv用法圖文詳解

    Python中sys.argv用法圖文詳解

    很多剛剛接觸python的人來說,對(duì)于python中sys.argv[]往往不是很明白,下面這篇文章主要給大家介紹了關(guān)于Python中sys.argv用法的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • Python簡單生成8位隨機(jī)密碼的方法

    Python簡單生成8位隨機(jī)密碼的方法

    這篇文章主要介紹了Python簡單生成8位隨機(jī)密碼的方法,結(jié)合實(shí)例形式分析了2種簡單生成隨機(jī)密碼的方法,非常簡單實(shí)用,需要的朋友可以參考下
    2017-05-05
  • django restframework使用redis實(shí)現(xiàn)token認(rèn)證

    django restframework使用redis實(shí)現(xiàn)token認(rèn)證

    本文主要介紹了django restframework使用redis實(shí)現(xiàn)token認(rèn)證,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • Django中的DateTimeField和DateField實(shí)現(xiàn)

    Django中的DateTimeField和DateField實(shí)現(xiàn)

    這篇文章主要介紹了Django中的DateTimeField和DateField實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • wxPython窗口中文亂碼解決方法

    wxPython窗口中文亂碼解決方法

    這篇文章主要介紹了wxPython窗口中文亂碼解決方法,在Python程序設(shè)計(jì)中比較常見,是非常實(shí)用的技巧,需要的朋友可以參考下
    2014-10-10
  • python Graham求凸包問題并畫圖操作

    python Graham求凸包問題并畫圖操作

    這篇文章主要介紹了python Graham求凸包問題并畫圖操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • 信號(hào)生成及DFT的python實(shí)現(xiàn)方式

    信號(hào)生成及DFT的python實(shí)現(xiàn)方式

    今天小編就為大家分享一篇信號(hào)生成及DFT的python實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • 解析Python中的異常處理

    解析Python中的異常處理

    這篇文章主要介紹了解析Python中的異常處理,異常處理是學(xué)習(xí)每門編程語言都必須掌握的重要知識(shí),本文代碼基于Python2.x版本,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

台山市| 青龙| 富阳市| 德昌县| 公安县| 普宁市| 望城县| 康乐县| 桦甸市| 睢宁县| 密云县| 涞源县| 星座| 顺义区| 盐城市| 阜新市| 大港区| 江城| 高陵县| 博罗县| 辰溪县| 辽阳市| 黄山市| 合水县| 榕江县| 宜章县| 襄垣县| 咸丰县| 彰化县| 江北区| 晋州市| 茶陵县| 沙湾县| 南丰县| 昌平区| 临高县| 法库县| 新晃| 宜都市| 灵台县| 涡阳县|