Python黑帽编程 3.2 ARP监控

在第3.1节《ARP欺骗》中,我们学习了ARP的基本原理,使用Python实现了我们自己的ARP欺骗工具。在上一节的基础上,我们来实现一个ARP监控程序,该程序存储局域网中所有的IP和MAC对应关系,如果有新加入的机器会动态添加到列表中,如果有机器的ARP记录发生了变化,会发出警告。

实现这个程序的关键,只有一点,就是监听网络中ARP数据包。Scapy中的sniff方法可以满足我们对ARP监听的需求。

3.2.1 sniff方法

sniff方法是用来嗅探数据的,我们首先使用help查看一下此方法的使用说明:

sniff(count=0, store=1, offline=None, prn=None, lfilter=None, L2socket=None, timeout=None, opened_socket=None, stop_filter=None, *arg, **karg)

    Sniff packets

    sniff([count=0,] [prn=None,] [store=1,] [offline=None,] [lfilter=None,] + L2ListenSocket args) -> list of packets

   

      count: number of packets to capture. 0 means infinity

      store: wether to store sniffed packets or discard them

        prn: function to apply to each packet. If something is returned,

             it is displayed. Ex:

             ex: prn = lambda x: x.summary()

    lfilter: python function applied to each packet to determine

             if further action may be done

             ex: lfilter = lambda x: x.haslayer(Padding)

    offline: pcap file to read packets from, instead of sniffing them

    timeout: stop sniffing after a given time (default: None)

    L2socket: use the provided L2socket

    opened_socket: provide an object ready to use .recv() on

    stop_filter: python function applied to each packet to determine

                 if we have to stop the capture after this packet

                 ex: stop_filter = lambda x: x.haslayer(TCP)

sniff()函数有一个重要的参数是filter,用来表示想要捕获数据包类型的过滤器,如只捕获ICMP数据包,则filter=”ICMP”;只捕获80端口的TCP数据包,则filter=”TCP and (port 80)”。其他几个重要的参数有:count表示需要不活的数据包的个数;prn表示每个数据包处理的函数,可以是lambda表达式,如prn=lambda x:x.summary();timeout表示数据包捕获的超时时间。

sniff(filter="icmp and host 66.35.250.151", count=2)

这段代码过滤个。

sniff(iface="wifi0", prn=lambda x: x.summary())

这段代码绑定网卡wifi0,对捕获的数据包使用summary进行数据汇总。

sniff(iface="eth1", prn=lambda x: x.show())

这段代码绑定网卡eth1,对数据包调用show方法,显示基本信息。

如何使用sniff方法过滤ARP请求呢?看下面的代码:

#!/usr/bin/python

from scapy import sniff,ARP

def watchArp(pkg):

pass

sniff(prn=watchArp,filter="arp",iface="eth0",store=0);

这段代码先定义了一个空的,不存储数据包。

数据包捕获就这样完成了,是不是体会到scapy的便捷性了呢?下面我们对捕获的数据包进行处理。

3.2.2 解析数据包

首先我们定义一个字典变量,用来存储ip和MAC的对应关系。

ip_mac = {}

然后,我们完善watchArp方法。

首先对ARP包做类型判断。

if pkt[ARP].op == 2:

print pkt[ARP].hwsrc + " " + pkt[ARP].psrc

如果是ARP响应包,打印MAC地址和ip地址。紧接着判断ip地址是否存储过。

if ip_mac.get(pkt[ARP].psrc) == None:

print "Found new device " + \

pkt[ARP].hwsrc + " " + \

pkt[ARP].psrc

ip_mac[pkt[ARP].psrc] = pkt[ARP].hwsrc

如果没有在我们的字典中,我们判断它是新加入网络的主机,打印出它的MAC和IP地址。如果在我们的字典中,但是MAC值不一样,肯定是某台机器变更了MAC地址,这是异常情况:

elif ip_mac.get(pkt[ARP].psrc) and ip_mac[pkt[ARP].psrc] != pkt[ARP].hwsrc:

print pkt[ARP].hwsrc + \

" has got new ip " + \

pkt[ARP].psrc + \

" (old " + ip_mac[pkt[ARP].psrc] + ")"

ip_mac[pkt[ARP].psrc] = pkt[ARP].hwsrc

打印出现异常情况的主机,同时更新我们的字典。

3.2.3 完整代码

将上面的代码拼装在一起,就是一个完整的例子了:

#!/usr/bin/python

from scapy.all import sniff,ARP

from signal import signal,SIGINT

import sys

ip_mac = {}

def watchArp(pkt):

if pkt[ARP].op == 2:

print pkt[ARP].hwsrc + " " + pkt[ARP].psrc

# Device is new. Remember it.

if ip_mac.get(pkt[ARP].psrc) == None:

print "Found new device " + \

pkt[ARP].hwsrc + " " + \

pkt[ARP].psrc

ip_mac[pkt[ARP].psrc] = pkt[ARP].hwsrc

# Device is known but has a different IP

elif ip_mac.get(pkt[ARP].psrc) and ip_mac[pkt[ARP].psrc] != pkt[ARP].hwsrc:

print pkt[ARP].hwsrc + \

" has got new ip " + \

pkt[ARP].psrc + \

" (old " + ip_mac[pkt[ARP].psrc] + ")"

ip_mac[pkt[ARP].psrc] = pkt[ARP].hwsrc

sniff(prn=watchArp,filter="arp",iface="eth0",store=0);

下面我们运行看看效果:

图5

3.2.3 小结

本节结合sniff和我们上一节的基础知识,做一个ARP监控的小例子。大家要学会举一反三,结合上一节的ARP欺骗,和本节的监控,二者是否可以结合呢?欢迎在微信订阅号的本篇文章下留言讨论。

下一节,我们针对很多小型的路由交换设备存在的ARP缓存区溢出问题,一起来完善一个MAC洪水攻击的程序。

3.3节《MAC洪水攻击》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单专栏”—>”Python黑帽编程进入即可。

查看完整系列教程,请关注我的微信订阅号(xuanhun521,下方二维码),回复“python”。问题讨论请加qq群:Hacking (1群):303242737   Hacking (2群):147098303。

玄魂工作室-精彩不断

Python黑帽编程 3.2 ARP监控的更多相关文章

  1. Python黑帽编程 3.1 ARP欺骗

    Python灰帽编程 3.1 ARP欺骗 ARP欺骗是一种在局域网中常用的攻击手段,目的是让局域网中指定的(或全部)的目标机器的数据包都通过攻击者主机进行转发,是实现中间人攻击的常用手段,从而实现数据 ...

  2. Python 黑帽编程大纲(变化中)

    Python 黑帽编程大纲(预览版) 教程说明: 本系列教程,采用的大纲母本为<Understanding Network Hacks Attack and Defense with Pytho ...

  3. Python黑帽编程 3.4 跨越VLAN

    Python黑帽编程 3.4 跨域VLAN VLAN(Virtual Local Area Network),是基于以太网交互技术构建的虚拟网络,既可以将同一物理网络划分成多个VALN,也可以跨越物理 ...

  4. PYTHON黑帽编程1.5 使用WIRESHARK练习网络协议分析

    Python黑帽编程1.5  使用Wireshark练习网络协议分析 1.5.0.1  本系列教程说明 本系列教程,采用的大纲母本为<Understanding Network Hacks At ...

  5. Python黑帽编程3.0 第三章 网络接口层攻击基础知识

    3.0 第三章 网络接口层攻击基础知识 首先还是要提醒各位同学,在学习本章之前,请认真的学习TCP/IP体系结构的相关知识,本系列教程在这方面只会浅尝辄止. 本节简单概述下OSI七层模型和TCP/IP ...

  6. Python黑帽编程 3.3 MAC洪水攻击

    Python灰帽编程 3.3 MAC洪水 传统的交换机(我只对我目前使用的交互机做过测试,按照常识只能这样表述)在数据转发过程中依靠对CAM表的查询来确定正确的转发接口,一旦在查询过程中无法找到相关目 ...

  7. Python黑帽编程 4.0 网络互连层攻击概述

    Python黑帽编程 4.0 网络互连层攻击概述 是时候重新温习下下面这张图了. 图2 本章的内容核心包含上图中的网络层和传输层.TCP/IP是整个网络协议体系中的核心,因为从这里开始,数据传输从局域 ...

  8. Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上)

    Python黑帽编程 4.1 Sniffer(嗅探器)之数据捕获(上) 网络嗅探,是监听流经本机网卡数据包的一种技术,嗅探器就是利用这种技术进行数据捕获和分析的软件. 编写嗅探器,捕获数据是前置功能, ...

  9. PYTHON黑帽编程 4.1 SNIFFER(嗅探器)之数据捕获(下)

    上一节(<4.1 SNIFFER(嗅探器)之数据捕获(上)>)中, 我们讲解了通过Raw Socket的方式来编写Sniffer的基本方法. 本节我们继续来编写Sniffer,只不过使用现 ...

随机推荐

  1. Spring Security4.X 简单实例介绍

    简介 本例子采用的是SpringMVC.SpringSecurity和Spring整合的简单使用 使用gradle搭建的项目(gradle比maven更加便捷),可以自行了解 web.xml配置 &l ...

  2. css雪碧图生成工具4.2更新

    v4.0更新连接:http://www.cnblogs.com/wang4517/p/4493917.html v4.1更新连接:http://www.cnblogs.com/wang4517/p/4 ...

  3. 图文介绍如何在Eclipse统计代码行数(转)

    使用Eclipse可以方便的统计工程或文件的代码行数,方法如下: 1.点击要统计的项目或许文件夹,在菜单栏点击Search,然后点击File... 2.选中正则表达式(Regular expressi ...

  4. ubuntu14.04下配置Java环境以及安装最新版本的eclipse

    首先是配置JDK 步骤一:下载最新版本的JDK,链接:http://www.oracle.com/technetwork/java/javase/downloads/index.html 步骤二:首先 ...

  5. Maven 命令

    win7环境下,Maven跳过测试编译项目的命令: 首先,在cmd环境下执行cd命令移动到需要编译的项目的home目录,然后执行命令:mvn    install -Dmaven.test.skip= ...

  6. MYSQL性能优化的最佳20+条经验

    MYSQL性能优化的最佳20+条经验 2009年11月27日 陈皓 评论 148 条评论  131,702 人阅读 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数 ...

  7. iOS 真机测试时报错:Provisioning profile "iOS Team Provisioning Profile: XXX” doesn't include the currently selected device “XXX”.

    这几天因工作需要,去给客户演示iOS项目打包的过程.之前演示都是顺利的,但后来客户自己操作时打电话说遇到了问题,出现报错. 就过去看了一下,发现一个很陌生的错误提示: The operation co ...

  8. ue4 c++学习推荐

    我由易到难推荐,不过在此之前还是先看看官方对于VS设置的推荐: https://docs.unrealengine.com/latest/INT/Programming/Development/Vis ...

  9. 单片机与控制实验(2)——LED点阵显示屏

    一.实验目的和要求 了解LED点阵显示的基本原理和实现方法.掌握点阵汉字库的编码和从标准字库中提取汉字编码的方法. 二.实验设备 单片机测控实验系统 LED点阵显示器实验模块 Keil开发环境 STC ...

  10. Windows Commands and API

    Shortcuts ... Symbolic Links https://en.wikipedia.org/wiki/NTFS_symbolic_link Hard Links https://en. ...