亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

如何在python使用scapy模塊實現一個ARP掃描功能

發布時間:2021-01-21 17:21:25 來源:億速云 閱讀:202 作者:Leah 欄目:開發技術

這篇文章給大家介紹如何在python使用scapy模塊實現一個ARP掃描功能,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

單進程ARP包

包的構造:

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

這里采用隊列的模式,主要是為了后面多進程同時發送做準備,涉及到ARP包的接受。這里我簡單描述一下ARP包接受的情況,當我們發送ARP廣播包的之后,我們就會接受到一個返回包。所以正確的情況就是,一個發送包一個接收包,一個發送包一個接收包,所以這里采用隊列的方式,一個一個IP地址的接收,并使用列表進行存儲,然后過濾ARP把內容,接收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])

進一步完善

那么既然我們已經了解了使用ARP進行基本的發包和收包,那么我們接下來就來編寫一個能夠掃描整個網段的ARP檢測

理一下思路,首先,我們需要將ip地址編程一個網段中的所有ip,可以借助ipaddress模塊實現,其次我們知道我們接收響應包是一對的,所以我們可以從一對一對的響應包中接收我們需要的目標IP和源MAC地址,其次就是優化代碼,輸出結果,這里我不再采用sys模塊進行傳參,而是采用一個新的模塊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 掃描網段 --ifname 網卡名稱')
 parser.add_option('--network', dest = 'network', type = 'string', help = '掃描網段')
 parser.add_option('--ifname', dest = 'ifname', type = 'string', help = '網卡名稱')
 (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地址及對應MAC:')
  for ip, mac in active_ip_mac:
   print(ip, mac)
 t2 = time.time()
 print('所用時間為:{}'.format(int(t2 - t1)))

運行結果

到此這篇關于python使用scapy模塊實現ARP掃描的過程的文章就介紹到這了,更多相關python實現ARP掃描內容請搜索億速云以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持億速云!

關于如何在python使用scapy模塊實現一個ARP掃描功能就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

桐柏县| 锡林郭勒盟| 防城港市| 鹿邑县| 察哈| 郯城县| 蒙城县| 峨眉山市| 隆德县| 永吉县| 同江市| 黑龙江省| 无锡市| 葫芦岛市| 锡林郭勒盟| 内丘县| 河东区| 陕西省| 开阳县| 开鲁县| 凯里市| 祁门县| 盐源县| 土默特左旗| 墨竹工卡县| 镇远县| 安国市| 老河口市| 宣武区| 双鸭山市| 东宁县| 慈利县| 连平县| 和政县| 汉沽区| 饶阳县| 斗六市| 基隆市| 什邡市| 安乡县| 焦作市|