python mac地址_使用Python嗅探热点和它的Mac地址

Python部落组织翻译, 禁止转载

好的,下面让我们继续领略Python编程的有趣和强大,我们将结合Python编程,借助于Scapy库来嗅探热点的Mac地址。首先,先了解一下SSIDs和Mac地址的基本概念吧。

SSID

简单来说,SSIDs就是你无线网络的名字。SSID是Service Set Identifier的缩写,意思是:服务集标识。SSIDs帮助我们在一个混杂的网络中分辨出两个不同的WIFI信号。比如,在居民楼里,可以同时存在几十个WIFI网络,我们就是通过SSIDs将它们清楚的区分开的。你打开电脑系统中的WIFI图标,网络管理器会把当前区域的所有可用WIFI信号都展示给你。你看到的所有信号,都显示着他们唯一的WIFI名字,比如”TP_Link2580“,这就是SSID。只有这样,我们才能识别出自家Access Point(热点)的SSID,并成功接入。

MAC Address

MAC地址就是一组由数字和字符组成的唯一ID,每个ID都和你的硬件设备,唯一绑定。MAC(Media Access Control)地址,意思是:媒体访问控制,或称为物理地址、硬件地址。常用于IEEE 802网络技术中,用来定义网络设备的位置,包括Ethernet和WiFi。一个MAC地址看起来是这个样子的:60:e3:27:4f:5c:6d

其中, 60:e3:27 = 24 bits

+ = 48 bits

4f:5c:6d = 24 bits

MAC地址的前面的24位是网卡的生产厂家的表示,同事也是厂家不能更改的,通常称为BIA(burned-in address)地址或组织唯一标志符(Organizationally Unique Identifier,即OUI)。剩下的24位是网卡地址。MAC地址一共48位。这一信息存储在硬件设备中,例如网卡的只读存储器或者其他的固件存储机制。一个网络几点可能有多块儿网卡,每个网卡拥有唯一的MAC地址。

Scapy

它是一个Python写的数据包处理工具。它能实现许多协议类型的数据包的伪造和解码,并可以进行发送、捕捉、匹配请求和应答等功能。它主要通过以下几种方式完成任务,如tracerouting、扫描、探测、单元测试、模拟攻击和网络发现等。很多使用其他工具实现的任务,使用Scapy都可以轻松完成,如Nmap、hping、arpscan、tshark(Wireshark的命令行版本)。它还能比其他工具更轻松的完成一些比较特殊的任务,比如发送帧的无效数字,注入本地802.11数据帧,技术协同(VLAN hopping+ARP cache poisoning, WEP加密信道中的VOIP解码)。

一些Scapy中用到的技术:Scanning: 主机探测,以确定它的一些具体细节。 例如,端口扫描。

Sniffing: 网络嗅探,拦截和记录流经网络的数据包。

Fuzzing: 使用随机数据作为输入数据,注入到计算机应用软件中,用来检查其稳定性。

如果你的Linux发行版本没有预装 scapy,你可以从以下链接进行获取:

下载并安装最新版本:http://www.secdev.org/projects/scapy/doc/installation.html

一旦你完成安装工作,让我们开始实战环节:#!/usr/bin/env python

from scapy.all import *

def PacketHandler (pkt) :

if pkt.haslayer (Dot11) :

if pkt.type == 0 and pkt.subtype == 8 :

print "Available SSID: %s " %(pkt.info)

sniff(iface = "mon0" , prn = PacketHandler)

这段代码将会扫描附近所有可用WIFI热点,并将扫描结果输出到终端窗口。为了完成扫描,需要体提前将WIFI网卡调整到监听模式。

监听模式(mon)基本上允许一台计算机来监听网卡所在无线网络中可以接收的所有流量。要启用监控模式,请遵循以下说明:

$airmon-ng start wlan0

上面的命令会在mon0上开启监听模式。

如果你要关闭监听模式,请输入命令:

$airmon-ng stop mon0

上面这条命令会关闭你WIFI网卡的监听。现在你菜单栏的WIFI图变应该看不到了,想重新获取的话,请输入下面这条命了:

$NetworkManager start

这条命令能帮你找回网络管理器图标,避免你重启系统。

现在,给上面那个Python程序赋予执行权限,并运行看看吧:

$chmod +x ssid.py

$./ssid.py

程序执行后的结果:Available SSID: lincoder

Available SSID: lincoder

Available SSID: lincoder

Available SSID: lincoder

Available SSID: lincoder

Available SSID: Other wifi network

Available SSID: lincoder

Available SSID: lincoder

Available SSID: New wifi network

Available SSID: lincoder

Available SSID: lincoder

Available SSID: Other wifi network

Available SSID: lincoder

正如你所看到的,输出结果中有一些重复的SSID。因此,想要去重并输出SSID对应的MAC地址,需要对代码做如下变更:#!/usr/bin/env python

from scapy.all import *

ap_list = []

def PacketHandler (pkt) :

if pkt.haslayer (Dot11) :

if pkt.type == 0 and pkt.subtype == 8 :

if pkt.addr2 not in ap_list :

ap_list.append(pkt.addr2)

print "Available SSID: %s And it's MAC addr: %s " %(pkt.info, pkt.addr2)

sniff(iface = "mon0" , prn = PacketHandler)

上面的代码中,我们添加了几行代码,用于获取MAC地址和去除重复的SSID,添加的代码如下:ap_list = []

if pkt.addr2 not in ap_list :

ap_list.append(pkt.addr2)

print "Available SSID: %s And it's MAC addr: %s " %(pkt.info, pkt.addr2)

这里,我们检查新发现的热点的MAC地址是否在ap_list中有重复的,如果没有重复的,则添加(ap_list.append(pkt.addr2))到热点列表(ap_list[])中,如此一来,我们通过比对MAC地址发现重复的SSID,对于重复的,我们直接跳过,新的,我们讲其加入添加的热点列表并打印到屏幕。

上述程序的输出结果为:Available SSID: lincoder And it's MAC addr: 60:e3:27:40:e4:5a

Available SSID: Other wifi network And it's MAC addr: 60:e3:27:44:6a:8e

Available SSID: New wifi network And it's MAC addr: 60:e3:27:2a:3a:1b

现在,你看不到重复的SSIDs了吧,不仅如此,还能看到SSIDs对应的MAC地址。

在程序中,我们从scap库(from scapy.all import *) 中引入了所有需要的包,然后每从网络中获取一个数据包,我们就调用PacketHandler方法进行数据包的处理。PacketHandler的定义为:def PacketHandler(pkt) ,输入参数为数据包。 Scapy通过mon0嗅探网络,在每次收到一个数据包的时候,调用PacketHandle方法。现在,我们对数据包的类型进行校验,如果类型值为0,并且数据包的子类型对应值为8,此时,我们确定这是一个Beacon Frame(信标)。

Beacon Frame

Beacon frame 定义于 IEEE 802.11 无线局域网管理框架. 里面所有的信息都是关于所在网络的。 Beacon frames被周期性的广播发送出来,去声明该无线局域网的存在.

现在我们成功打印出了嗅探到的每个热点的SSIDS和对应的MAC地址,同时,如前文所述,又通过检查热点列表(ap_list[])重的MAC地址进行了去重,忽视了重复的热点。以上就是使用Python对热点进行嗅探并输出其对应MAC地址的方法。

今天就到这里,敬请期待更多炫酷的技术吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值