Python Scapy ARP

简介:

参考手册:https://fossies.org/dox/scapy-2.3.3/


当一台主机把以太网数据帧发送到位于同一个局域网上的另一台主机时,是根据48bit的以太网地址来确定目的接口的。

设备驱动程序从不检查IP数据包中的目的IP地址。

地址解析为这两种不同的地址形式提供映射:32bit的IP地址和数据链路曾使用的任何类型的地址。(FR环境)

ARP为IP地址到对应的硬件地址之间提供动态映射。我们之所以用动态这个词是因为这个过程是自动完成的,一般应用程序用户或系统管理员不必关心。


在ARP背后有有一个基本概念,那就是网络接口有一个硬件地址(一个48bit的值,标识不同的以太网或令牌环网络接口)。在硬件层次上进行的数据帧交换必须有正确的接口地址。但是TCP/IP有自己的地址:32bit的IP地址。知道主机的IP地址并不能让内核发送一帧数据给主机。内核(如以太网驱动程序)必须知道目的端的硬件地址才能发送数据。ARP的功能是在32bit的IP地址和采用不同网络技术的硬件地址之间提供动态映射。

点对点链路不使用ARP。当设置这些链路时(一般在引导过程进行),必须告知内核链路每一端的IP地址。像以太网地址这样的硬件地址并不涉及。

只有多路访问链路才需要ARP这样的技术。

bd026c46612d8c05a571a8a2d1184d4d.png

1362a196e266c72a6642320c05a4c27c.png

3ebaa89c5e14ed66f7669aea729dc5ed.png


ARP高效运行的关键是由于每个主机上都有一个ARP高速缓存。这个高速缓存存放了最近Internet地址到硬件地址之间的映射记录。高速缓存中每一项的生存时间一般为20分钟,起始时间从被创建时开始算起。


ARP请求包样例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/python3.4
# -*- coding=utf-8 -*-
 
import  logging
logging.getLogger( "scapy.runtime" ).setLevel(logging.ERROR) #清除报错
from  scapy. all  import  *
 
#配置各种信息,以便调用
localmac  =  '00:0c:29:8d:5c:b6'
localip  =  '202.100.1.138'
destip  =  '202.100.1.139'
ifname  =  'eno33554944'
 
#######################源MAC为本地MAC####目的MAC为广播#########操作码为1(请求)#######################################################由于多个网卡所以需要指派iface###########
result_raw  =  srp(Ether(src = localmac, dst = 'FF:FF:FF:FF:FF:FF' ) / ARP(op = 1 , hwsrc = localmac, hwdst = '00:00:00:00:00:00' , psrc = localip, pdst = destip), iface  =  ifname, verbose  =  False )
 
'''
sr() function is for sending packets and receiving answers. The function #returns a couple of packet and answers, and the unanswered packets. 
sr1() is a variant that only return one packet that answered the packet (or #the packet set) sent. The packets must be layer 3 packets (IP, ARP, etc.). 
srp() do the same for layer 2 packets (Ethernet, 802.3, etc.).
send() function will send packets at layer 3. That is to say it will handle routing and layer 2 for you. 
sendp() function will work at layer 2.
'''
 
#print(result_raw)
#(<Results: TCP:0 UDP:0 ICMP:0 Other:1>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>) 一个元组,[0]收到响应的数据包,[1]未收到响应的数据包
#print(type(result_raw[0]))
#<class 'scapy.plist.SndRcvList'> #https://fossies.org/dox/scapy-2.3.1/classscapy_1_1plist_1_1SndRcvList.html
result_list  =  result_raw[ 0 ].res  #res: the list of packets,产生由收发数据包所组成的清单(list)
#print(result_list)
#[(<Ether  dst=FF:FF:FF:FF:FF:FF src=00:0c:29:8d:5c:b6 type=ARP |<ARP  op=who-has hwsrc=00:0c:29:8d:5c:b6 psrc=202.100.1.138 hwdst=00:00:00:00:00:00 pdst=202.100.1.139 |>>, <Ether  dst=00:0c:29:8d:5c:b6 src=00:0c:29:43:52:cf type=ARP |<ARP  hwtype=0x1 ptype=IPv4 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:43:52:cf psrc=202.100.1.139 hwdst=00:0c:29:8d:5c:b6 pdst=202.100.1.138 |<Padding load=‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00’ |>>>)]
#一个列表,每一个item为一个元组,元组内包括一次ARP请求与回应
 
#result_list[0][1][0],[0]表示第一组数据包(收发),[1],表示收包(0为发包),[0]表示以太网头部
#print(result_list[0][1][0].fields) 以太网头部字段
#{'dst': '00:0c:29:8d:5c:b6', 'type': 2054, 'src': '00:0c:29:43:52:cf'}
 
#result_list[0][1][0],[0]表示第一组数据包(收发),[1],表示收包(0为发包),[1]表示ARP头部
#print(result_list[0][1][1].fields) ARP头部字段
#{'pdst': '202.100.1.138', 'hwtype': 1, 'hwdst': '00:0c:29:8d:5c:b6', 'plen': 4, 'ptype': 2048, 'hwsrc': '00:0c:29:43:52:cf', 'op': 2, 'hwlen': 6, 'psrc': '202.100.1.139'}
 
print ( 'IP地址: '  +  result_list[ 0 ][ 1 ][ 1 ].fields[ 'psrc' +  ' MAC地址: '  +  result_list[ 0 ][ 1 ][ 1 ].fields[ 'hwsrc' ])

1ccf59da24da649641629ff436b7daae.png













本文转自Grodd51CTO博客,原文链接:http://blog.51cto.com/juispan/1980254,如需转载请自行联系原作者
相关文章
|
3月前
|
缓存 监控 网络协议
21.6 Python 构建ARP中间人数据包
ARP中间人攻击(ARP spoofing)是一种利用本地网络的`ARP`协议漏洞进行欺骗的攻击方式,攻击者会向目标主机发送虚假`ARP`响应包,使得目标主机的`ARP`缓存中的`IP`地址和`MAC`地址映射关系被篡改,从而使得目标主机将网络流量发送到攻击者指定的虚假`MAC`地址。攻击者可以在不被发现的情况下窃取目标主机的网络流量、信息等,也可以进行其他的恶意行为,如中间人攻击、监听等。
21.6 Python 构建ARP中间人数据包
|
4月前
|
网络协议 安全 测试技术
21.2 Python 使用Scapy实现端口探测
Scapy 是一款使用纯Python编写的跨平台网络数据包操控工具,它能够处理和嗅探各种网络数据包。能够很容易的创建,发送,捕获,分析和操作网络数据包,包括TCP,UDP,ICMP等协议,此外它还提供了许多有用的功能,例如嗅探网络流量,创建自定义协议和攻击网络的安全测试工具。使用Scapy可以通过Python脚本编写自定义网络协议和攻击工具,这使得网络安全测试变得更加高效和精确。
21.2 Python 使用Scapy实现端口探测
|
3月前
|
网络协议 安全 网络安全
Python 使用Scapy构造特殊数据包
Scapy是一款Python库,可用于构建、发送、接收和解析网络数据包。除了实现端口扫描外,它还可以用于实现各种网络安全工具,例如`SynFlood`攻击,`Sockstress`攻击,`DNS`查询攻击,`ARP`攻击,`ARP`中间人等。这些工具都是基于构造、发送和解析网络数据包来实现的,可以用于模拟各种网络攻击,测试网络安全防御措施等。Scapy是网络安全领域中非常有用的工具之一。
Python 使用Scapy构造特殊数据包
|
网络架构 Python
Python 使用Scapy解析TTL值
TTL 由8比特组成,可以用来确定在到达目的地之前数据包经过了几跳,当计算机发送一个IP数据包时会设置TTL字段为数据包在到达目的地之前所应经过的中继跳转的上限值,数据包每经过一个路由设备,TTL值就自减一,若减至0还未到目的地,路由器会丢弃该数据包以防止无限路由循环。
|
安全 网络安全 Python
Python Scapy 愚弄入侵检测系统
所谓愚弄入侵检测系统,其原理是使通过制造假的攻击迹象来触发IDS警报,从而让目标系统产生大量警告而难以作出合理的判断,利用Scapy这个第三方Python库,可以很好的实现对入侵检测系统的愚弄。
|
网络协议 Python
Python 使用Scapy操作DNS流量
通常一个DNS数据包,客户端发送DNSQR请求包,服务器发送DNSRR响应包。一个DNSQR包含有查询的名称qname、查询的类型qtype、查询的类别qclass。一个DNSRR包含有资源记录名名称rrname、类型type、资源记录类别rtype、TTL等等。
|
网络协议 Python Windows
Python 实现ARP扫描与欺骗
ARP欺骗又称ARP毒化或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC错以为攻击者更改后的MAC地址是网关的MAC,导致网络不通。此种攻击可让攻击者获取局域网上的数据包甚至可篡改数据包,且可让网络上特定计算机或所有计算机无法正常连线。
Python 实现ARP扫描与欺骗
|
网络协议 Python
Python scapy网络包嗅探模块(转载)
1.窃取Email认证 1.1创建一个简单的嗅探器,捕获一个数据包,packet.show()函数解析了其中的协议信息并输出了包的内容。 from scapy.
2722 0
|
测试技术 Python

相关产品

  • 云迁移中心