ARP协议

ARP 协议也叫做地址解析协议,就是IP地址转换成MAC地址的协议

原理:在局域网内广播,向所有的主机发送包含目标IP地址的请求报文,如果该IP地址的主机接到了报文,那么就会将自己的MAC地址返回给发送端。同样根据这个原理就可以实现扫描局域网的所有主机。

ARP请求报文

一个完整的ARP数据报包括:14字节的以太网首部 + 28字节的ARP数据报

前者包括:6字节的目的MAC地址 + 6字节的发送端MAC地址 + 2字节的类型(0x0806:ARP协议)

后者包括:2B 硬件类型+2B 协议类型+1B 硬件地址长度+1B协议地址长度+2B 操作类型+6B 发送端 MAC 地址+4B 发送端 IP 地址+6B 目的端 MAC 地址+4B 目的端 IP 地址

ARP发送

# 将16进制的MAC地址转换成,需要的字符格式

def mac2a(m):

return binascii.a2b_hex(m)

# 将ip地址列表转换成,需要的字符格式

def ip2a(i):

ipi = i[0]*256*256*256+i[1]*256*256+i[2]*256+i[3]

iph = hex(ipi)

return binascii.a2b_hex(iph[2:])

# 向指定IP发送ARP报

def send(ip):

# 设置协议族类型和上层协议

rawS = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,

socket.htons(0x0806))

# 绑定网卡和端口号

rawS.bind(("wlo1",socket.htons(0x0800)))

# 以太网头封包,6s:6B的目的端MAC,6s:6B 发送端MAC,2s:2B的协议类型

tha = mac2a('ffffffffffff')#target hardware address 目的端硬件地址

sha = mac2a('34238769543e')#sender hardware address 发送端硬件地址

ethHdr = tha+sha+'\x08\x06'

# ARP数据封包

hrd = '\x00\x01'#硬件地址类型,默认1:以太网

pro = '\x08\x00'#网络地址类型,0800:IP地址

hln = '\x06'#硬件地址长度,单位B

pln = '\x04'#网络地址长度,单位B

op = '\x00\x01'#操作类型,1:arp请求,2:arp响应

#sha = sha#发送端硬件地址

spa = ip2a([192,168,199,112])#发送端网络地址

#tha = tha#目的端硬件地址

tpa = ip2a(ip)#目的端网络地址

arpPkt = hrd+pro+hln+pln+op+sha+spa+tha+tpa

# 发送

rawS.send(ethHdr+arpPkt)

ARP监听

def a2ip(a):

return '%d.%d.%d.%d'%tuple(map(ord,list(a)))

def a2mac(a):

h = binascii.b2a_hex(a)

return ':'.join([h[i:i+2] for i in xrange(0,len(h),2)])

#监听ARP响应

def listen():

pc=pcap.pcap("wlo1") #注,参数可为网卡名,如eth0

for pt,pd in pc: #pt为收到时间,pd为收到数据

eth = dpkt.ethernet.Ethernet(pd)

if eth.type==2054:

arp = eth.data

if arp.op==2: #ARP响应

print "在线",a2ip(arp.spa)," ",a2mac(arp.sha)

测试执行

~/python/pcap/arp$ sudo python lanScan.py

扫描开始

在线 192.168.199.1 d4:ee:07:1b:71:9c

在线 192.168.199.135 fc:64:ba:04:e0:2f

在线 192.168.199.148 90:00:4e:1e:19:ba

在线 192.168.199.153 a0:88:69:9d:ef:3b

在线 192.168.199.154 84:9f:b5:41:aa:f1

在线 192.168.199.154 84:9f:b5:41:aa:f1

在线 192.168.199.164 24:fd:52:92:14:86

扫描结束

~/python/pcap/arp$

这样就可已知道所有的局域网的主机了,也可以使用 ping 命令,查看对方的操作系统,例如:

~/python/pcap/arp$ ping 192.168.199.1

PING 192.168.199.1 (192.168.199.1) 56(84) bytes of data.

64 bytes from 192.168.199.1: icmp_seq=1 ttl=64 time=1.69 ms

64 bytes from 192.168.199.1: icmp_seq=2 ttl=64 time=1.20 ms

# 主要看ttl字段,一般情况下

# Linux系统的TTL值为64或255

# Windows NT/2000/XP系统的TTL值为128

# Windows 98系统的TTL值为32

# UNIX主机的TTL值为255

完整的代码

#!/usr/bin/python

# -*- coding: UTF-8 -*-

# sendARP.py

# 探测局域网 IP

import socket

import struct

import binascii

import dpkt

import pcap

import thread

# 将16进制的MAC地址转换成,需要的字符格式

def mac2a(m):

return binascii.a2b_hex(m)

# 将ip地址列表转换成,需要的字符格式

def ip2a(i):

ipi = i[0]*256*256*256+i[1]*256*256+i[2]*256+i[3]

iph = hex(ipi)

return binascii.a2b_hex(iph[2:])

# 向指定IP发送ARP报

def send(ip):

# 设置协议族类型和上层协议

rawS = socket.socket(socket.PF_PACKET,socket.SOCK_RAW,

socket.htons(0x0806))

# 绑定网卡和端口号

rawS.bind(("wlo1",socket.htons(0x0800)))

# 以太网头封包,6s:6B的目的端MAC,6s:6B 发送端MAC,2s:2B的协议类型

tha = mac2a('ffffffffffff')#target hardware address 目的端硬件地址

sha = mac2a('34238769543e')#sender hardware address 发送端硬件地址

ethHdr = tha+sha+'\x08\x06'

# ARP数据封包

hrd = '\x00\x01'#硬件地址类型,默认1:以太网

pro = '\x08\x00'#网络地址类型,0800:IP地址

hln = '\x06'#硬件地址长度,单位B

pln = '\x04'#网络地址长度,单位B

op = '\x00\x01'#操作类型,1:arp请求,2:arp响应

#sha = sha#发送端硬件地址

spa = ip2a([192,168,199,112])#发送端网络地址

#tha = tha#目的端硬件地址

tpa = ip2a(ip)#目的端网络地址

arpPkt = hrd+pro+hln+pln+op+sha+spa+tha+tpa

# 发送

rawS.send(ethHdr+arpPkt)

def a2ip(a):

return '%d.%d.%d.%d'%tuple(map(ord,list(a)))

def a2mac(a):

h = binascii.b2a_hex(a)

return ':'.join([h[i:i+2] for i in xrange(0,len(h),2)])

#监听ARP响应

def listen():

pc=pcap.pcap("wlo1") #注,参数可为网卡名,如eth0

for pt,pd in pc: #pt为收到时间,pd为收到数据

eth = dpkt.ethernet.Ethernet(pd)

if eth.type==2054:

arp = eth.data

if arp.op==2: #ARP响应

print "在线",a2ip(arp.spa)," ",a2mac(arp.sha)

#listen()

thread.start_new_thread(listen,())

print "扫描开始"

for i in xrange(1,255):

send([192,168,199,i])

print "扫描结束"

python arp扫描_基于python的局域网arp扫描相关推荐

  1. python病毒扫描器_基于Python的病毒扫描机制

    构建集中式病毒扫描机制(ClamAV) Clam AntiVirus(ClamAV)是一款免费而且开源的防毒软件,软件与病毒库的更新皆有社区免费发布,官网地址:http://www.clamav.ne ...

  2. python 英语分词_基于Python NLTK库进行英文文本预处理

    文本预处理是要文本处理成计算机能识别的格式,是文本分类.文本可视化.文本分析等研究的重要步骤.具体流程包括文本分词.去除停用词.词干抽取(词形还原).文本向量表征.特征选择等步骤,以消除脏数据对挖掘分 ...

  3. python回归算法_基于Python的函数回归算法验证

    看机器学习看到了回归函数,看了一半看不下去了,看到能用方差进行函数回归,又手痒痒了,自己推公式写代码验证: 常见的最小二乘法是一阶函数回归 回归方法就是寻找方差的最小值 y = kx + b xi, ...

  4. python数据采集系统_基于python的聚焦网络爬虫数据采集系统设计与实现

    基于 python 的聚焦网络爬虫数据采集系统设计与实现 杨国志 ; 江业峰 [期刊名称] < <科学技术创新> > [年 ( 卷 ), 期] 2018(000)027 [摘要 ...

  5. python编码尺寸_基于Python批量生成指定尺寸缩略图代码实例

    这篇文章主要介绍了基于Python批量生成指定尺寸缩略图代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 最近我们商城上架的应用越来越丰富了. ...

  6. cv2 python 获取斑马线_基于python的opencv图像处理实现对斑马线的检测示例

    基本思路 斑马线检测通过opencv图像处理来进行灰度值转换.高斯滤波去噪.阈值处理.腐蚀和膨胀后对图像进行轮廓检测,通过判断车辆和行人的位置,以及他们之间的距离信息,当车速到超过一定阈值时并且与行人 ...

  7. python词频作图_基于Python的词频分析与云图生成

    近期,学校对呼和浩特市第二中学学生特质进行了调查,具体题目为"用关键词描述一下二中学生的特质(尽量在20字以内)". 为了更好的展示调查结果,我们基于Python的jieba库和w ...

  8. 基于python爬虫数据处理_基于Python爬虫的校园数据获取

    苏艺航 徐海蛟 何佳蕾 杨振宇 王佳鹏 摘要:随着移动时代的到来,只适配了电脑网页.性能羸弱的校园教务系统,已经不能满足学生们的移动查询需求.为此,设计了一种基于网络爬虫的高实用性查询系統.它首先通过 ...

  9. 基于python的网站_基于Python的网站爬虫应用研究

    基于 Python 的网站爬虫应用研究 陈清 [期刊名称] <通讯世界> [年 ( 卷 ), 期] 2020(027)001 [摘要] 如何于海量的互联网网站中获取有用资源信息 , 对网站 ...

最新文章

  1. pandas数据框,统计某列或者某行数据元素的个数
  2. gif 图片制作和拆解
  3. mod_jk是Apache服务器的一个可插入模块
  4. 物联网的发展之—Vecloud微云
  5. linux dd命令制作软盘,制作Linux启动软盘的四种方法
  6. Tomcat 初始化端点错误--Error initializing endpoint
  7. 一条更新SQL 是如何执行的?
  8. Eclipse生成get,set方法,无参构造方法和有参构造方法
  9. RCP:给GEF编辑器添加网格和标尺。
  10. 【C】——C深入探讨——switch语句的default位置【转】
  11. lambda表达式python_python lambda表达式用法
  12. 计算机显微视觉相关概念,计算机视觉热门科研!基于深度神经网络的蛋白质智能显微分类系统,已开启!...
  13. HashSet、TreeSet、LinkedHashSet的区别
  14. 用户故事讲解(看最后的例子,你应该就知道怎么样写用户故事了)
  15. spyder python下载_【spyder编程软件下载】spyder官方下载 v2.1.0 最新版-七喜软件园...
  16. i510300h和i78750h参数对比哪个好
  17. GStreamer应用开发文档的ogg播放器
  18. Android RGB颜色对照表
  19. 有趣且重要的Git知识合集(5)Merge branch ‘master‘ of
  20. 知己知彼 看CIO如何成功领导80后

热门文章

  1. 关闭、刷新、跳转、离开当前网页前提示
  2. 设置VSCode自动保存
  3. 在CentOS 6.3 64bit上安装最新版tsar并监控ATS 5.3
  4. Revit的Enscape基本培训(2021) Enscape Essential Training for Revit (2021)
  5. C#和Unity编码和游戏开发学习教程
  6. Blender创作你自己的动画短片学习教程
  7. leetcode-135 分发糖果
  8. python工具使用笔记
  9. vagrant 介绍,安装与使用
  10. Servlet(一)