通过python对本局域网进行ARP扫描获取MAC

#!/usr/local/bin/python3
"""
对本局域网进行ARP扫描 ARP (Address Resolution Protocol,ARP);

以太网MAC地址识别(如下):
主机在整个局域网广播ARP请求消息,该ARP请求中包含目标设备的IP地址;
局域网上的每一台设备都会检查该ARP请求,看该ARP请求中的IP地址是不是自己;
只有符合该IP地址的设备才会发送ARP响应;
ARP响应该中包涵了ARP请求中的IP地址及对应的MAC地址;
"""
"""
这里需要Scapy这个模块
https://pypi.org/project/ 去这里下载scapy
或者去它官网https://scapy.net/ 下载

Scapy是一个功能强大的交互式包操作程序.它能够伪造或解码大量的协议包,
还有能发送,捕获,匹配及回复各种大量的协议包.它还能轻松的处理大量的经典任务,
如扫描,跟踪,探测,单元测试,×××或网断扫描;
并且它还能处理其它其它工具所无法处理的任务,如发送无效帧及注入自己的802.11帧,
还有一些结合技术(如VLAN跳转+ARP缓存中毒,WEP加密信道上的VoIP解码等),
总之就是很强大

执行本脚本时 ,如果需要用sudo来执行
"""

"""
ls() 列出所有的协议及协议选项
lsc() 列出所有scapy的命令函数
"""

"""
/操作符在两层之间起到一个组合的作用。当使用该操作符时,
下层可以根据其上层,使它的一个或多个默认字段被重载。
本例中需要用的下面几个函数
>>>ls(Ether)
dst : DestMACField = (None)
src : SourceMACField = (None)
type : XShortEnumField = (36864)
#dst 目标mac地址 6字节 48位 dst设置为ff:ff:ff:ff:ff:ff 为广播设置
#src 源mac地址 6字节 48位
#type 以太网类型,用于标识上一层使用的是什么协议;比如0800是IP协议,0806是ARP协议,8035是RARP协议

>>>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 硬件地址的类型,硬件地址不只以太网一种,是以太网类型时此值为1
#ptype 标识上一层使用的是什么协议
#op 是操作类型字段,值为1,表示进行ARP请求;值为2,表示进行ARP应答;值为3,表示进行RARP请求;值为4,表示进行RARP应答。
#hwsrc 源mac地址
#psrc 源ip地址
#hwdst 目标mac地址
#pdst 目标ip地址

>>> srp1(pkt,timeout=1,verbose=0 )
#srp1 在第二层协议上发送及接收包并返回第一次的应答
#pkt 构建包的变量
#timeout=1 超时1秒就丢弃,实际时间看程序处理能力而定
#verbose=0 不显示详细信息

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

def get_local_net():
#获取主机名
hostname = socket.gethostname()
#获取主机的局域网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)
#组合协议包
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)

原文地址:http://blog.51cto.com/quietnight/2162891

时间: 2024-10-29 19:11:13

通过python对本局域网进行ARP扫描获取MAC的相关文章

python 使用scapy进行ARP扫描

一. 描述 使用scapy第三方库,编写一个可以对一个网段进行ARP扫描,获得该往段内活跃主机的IP地址和MAC地址. 二. 分析与方案 首先,从scapy导入相关的模块. Ether()/ARP()构造ARP包. srp1()发送与接收ARP包. 代码示例如下: #!/usr/bin/env python # _*_ coding=utf-8 _*_ from scapy.all import * import sys,getopt def usage(): print "Usage: sud

scapy编写简单的ARP扫描脚本 本课程基于 Python 的 scapy 模块编写,适合有 Python 基础的同学学习,最终完成一个简单的 ARP 扫描脚本。

scapy编写简单的ARP扫描脚本 本课程基于 Python 的 scapy 模块编写,适合有 Python 基础的同学学习,最终完成一个简单的 ARP 扫描脚本.

ARP扫描渗透测试 scapy模块 使用python

ARP扫描渗透测试 任务描述: 假定各位选手是TaoJin电子商务企业的信息系统安全工程师,负责该企业信息系统的安全维护,现欲对该系统中主机进行ARP扫描渗透测试,确认该系统中都有哪些IP主机在线. 1.进入虚拟机操作系统:Ubuntu Linux 32bit中的/root目录,完善该目录下的arp_sweep.py文件,填写该文件当中空缺的Flag1字符串,将该字符串作为Flag值(形式:Flag1字符串)提交:(arp_sweep.py脚本功能见该任务第6题) 2.进入虚拟机操作系统:Ubu

Python windows下获取MAC地址的一种方法

我最近有一个项目,使用Python在win32下开发一个COM组建,该COM组建其中一个方法是获取本地电脑的MAC地址. 需求很简单,虽然我是Python新手中的新手,但我还是会使用搜索引擎进行搜索. 百度一下,发现大部分都介绍使用import UUID获取MAC地址,或使用os.popen("ipconfig /all")的方式获取.而后者容易受到操作系统中英文环境影响. 如这篇文章:http://www.cnblogs.com/Jerryshome/archive/2011/11/

python学习之最简单的获取本机ip信息的小程序

文章是从我的个人博客粘贴过来的,大家可以直接访问我的个人博客哦 http://www.iwangzheng.com 获取本机ip信息的命令ifconfig总是在用,这次拿到pyhton代码里,感觉python好麻烦啊,每次都要import. 可以在程序里直接read出来,也可以先在命令行执行ifconfig > xx.txt,这样可以直接访问倒入后的文本信息. 这个小程序有个问题,与朋友讨论了还没解决彻底,如果用findall是可以匹配所有的,但是怎么解决用match只匹配一次的问题呢,当然如果

python分别使用多线程和多进程获取所有股票实时数据

python分别使用多线程和多进程获取所有股票实时数据 前一天简单介绍了python怎样获取历史数据和实时分笔数据,那么如果要获取所有上市公司的实时分笔数据,应该怎么做呢? 肯定有人想的是,用一个列表存储所有上市公司的股票代号,然后无限循环获取不就得了吗? 现在深市和沪市的股票一共有3400多只,如果你真这样做的话,获取一次所有股票的实时数据需要十几二十秒的时间,甚至更多,而且非常容易因为等待超时而使程序挂掉,如果你的模型对实时数据的质量要求非常高,这肯定是不行的,即使不考虑数据质量,获取数据的

运维脚本:python实现批量IP端口扫描

运维脚本:python实现批量IP端口扫描 专注网络运维,只发实用干货 扫描二维码关注公众 今天不想更新,发一篇存货,分享一小段python代码给大家,能实现简单的批量端口扫描,废话不多说,先上代码: =========================================================== # -*- coding: utf-8 -*- import socket import time import xlrd import threading hostfile =

局域网ip地址扫描_v1版本

局域网ip地址扫描 工作中,我们有时需要对局域网中ip地址使用情况进行统计.可以使用shell脚本进行扫. 脚本功能: 在线使用IP写入list_online.txt文件 未在线IP写入list_offline.txt文件 #!/bin/bash #2019年10月31日00:45:54 #IP address scanning v1 #sunjinhua ######################## NET_VER="$1" NET="$NET_VER" fo

Winpcap网络编程八之Winpcap实战,ARP协议获得MAC表及主机通信

大家好,本次我们需要完成的任务是: 完成两台主机之间的数据通信(数据链路层) 仿真ARP协议获得网段内主机的MAC表 使用帧完成两台主机的通信(Hello! I'm -) 声明:本博客不针对伸手党,求代码?求源码?求完整程序?得了,既然你对自己的学习这么不负责,那我也没必要写出来了,本文章的目的是为大家的Winpcap编程带来一定的借鉴,希望对大家的课程设计有一定的帮助.总之,我相信,大家看了前几篇 Winpcap 编程基础知识,再加上这篇文章的讲解,一步一步做下来,相信你能成功的. P.S.