linux Scapy 进行arp数据包详细过程

[email protected]:~# scapy
WARNING: No route found for IPv6 destination :: (no default route?)
INFO: Can‘t import python ecdsa lib. Disabled certificate manipulation tools
Welcome to Scapy (unknown.version)

>> a=Ether()/ARP()
>> a.show()
###[ Ethernet ]###
dst= 00:50:56:ef:49:1f
src= 00:0c:29:e2:bb:15
type= 0x806
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:e2:bb:15
psrc= 192.168.80.250
hwdst= 00:00:00:00:00:00
pdst= 0.0.0.0

>>arp1=srp(Ether(src=‘00:0c:29:e2:bb:15‘,dst=‘FF:FF:FF:FF:FF:FF‘)/ARP(op=1,hwsrc=‘00:0c:29:e2:bb:15‘,hwdst=‘00:00:00:00:00:00‘,psrc=‘192.168.80.250‘,pdst=‘192.168.80.251‘,))
Begin emission:
*Finished to send 1 packets.

Received 1 packets, got 1 answers, remaining 0 packets
1)>>> print(arp1)
(<Results: TCP:0 UDP:0 ICMP:0 Other:1>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
产生收到响应与没收到响应元组;
2)查看arp1的数据类型:

>> print(type(arp1))
<type ‘tuple‘> 为元组
3)用元组的方法只打印接收报文:
>> print(arp1[0])
<Results: TCP:0 UDP:0 ICMP:0 Other:1>
4)显示arp1[0]数据类型:
>> print(type(arp1[0]))
<class ‘scapy.plist.SndRcvList‘>
5)查看该‘scapy.plist.SndRcvList数据类型处理方法(上网查看https://fossies.org/dox/scapy-2.3.3/)用res的方法
6)产生响应数据包中的发送与接收的包,并把包res方法列出来
>> print(arp1[0].res)*第一对发送包与收发包
[(<Ether dst=FF:FF:FF:FF:FF:FF src=00:0c:29:e2:bb:15 type=0x806 |<ARP op=who-has hwsrc=00:0c:29:e2:bb:15 psrc=192.168.80.250 hwdst=00:00:00:00:00:00 pdst=192.168.80.251 |>>, <Ether dst=00:0c:29:e2:bb:15 src=00:0c:29:21:fd:03 type=0x806 |<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:21:fd:03 psrc=192.168.80.251 hwdst=00:0c:29:e2:bb:15 pdst=192.168.80.250 |<Padding load=‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘ |>>>)]
7)提出收包数据
>> print(arp1[0].res[0][1])
8)查看arp1[0].res[0][1]数据类型:
>> print(type(arp1[0].res[0][1]))
<class ‘scapy.layers.l2.Ether‘>
9)查看该scapy.layers.l2.Ether数据类型处理方法(上网查看https://fossies.org/dox/scapy-2.3.3/)用
Static Public Attributes
string name = "Ethernet"

list fields_desc

的方法
10)用fields方法(产生相应得字典)提取收包数据:
print(arp1[0].res[0][1].fields)
{‘src‘: ‘00:0c:29:21:fd:03‘, ‘dst‘: ‘00:0c:29:e2:bb:15‘, ‘type‘: 2054}
11)用show方法读取收包数据:
print(arp1[0].res[0][1].show())
###[ Ethernet ]###
dst= 00:0c:29:e2:bb:15
src= 00:0c:29:21:fd:03
type= 0x806
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= is-at
hwsrc= 00:0c:29:21:fd:03
psrc= 192.168.80.251
hwdst= 00:0c:29:e2:bb:15
pdst= 192.168.80.250
###[ Padding ]###
load= ‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘
12)用show方法读取收包数据中ARP:

>> print(arp1[0].res[0][1][1].show())
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= is-at
hwsrc= 00:0c:29:21:fd:03
psrc= 192.168.80.251
hwdst= 00:0c:29:e2:bb:15
pdst= 192.168.80.250
###[ Padding ]###
load= ‘\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00‘
13)产生自己想要的print结果:
>> print(‘ip:‘ + arp1[0].res[0][1][1].fields[‘psrc‘]+ ‘ mac:‘ + arp1[0].res[0][1][1].fields[‘hwsrc‘])
ip:192.168.80.251 mac:00:0c:29:21:fd:03
14)数据结构:

原文地址:http://blog.51cto.com/baoer0717/2087221

时间: 2024-10-19 04:21:03

linux Scapy 进行arp数据包详细过程的相关文章

Linux系统下网络数据包的处理流程

本文主要探讨linux环境下,数据包从网卡接收到协议栈处理的处理流程和对应的代码逻辑. 分析的内核代码版本为4.17.6,涉及到的网卡硬件功能特性和逻辑均以intel的82599以太网控制器为例,驱动为ixgbe.本文仅讨论physical function的驱动代码逻辑. 数据包从网卡接收开始,其总体处理流程如下: 网卡接收光/电信号,将其转换为数据帧内容,如果帧符合以太网地址等过滤条件,则保存到FIFO缓存中.82599控制器中共有8个FIFO缓存队列. 网卡解析FIFO中数据帧的2/3/4

STM32F0xx_DMA收发USART数据配置详细过程

前言 关于DMA(Direct Memory Access)的功能,前面关注我微信的人应该知道,其实我已经在F1芯片上简单讲了一下.有网友要求在F0讲解一下使用DMA收发串口数据.今天就应网友要求总结一下在F0芯片上,使用DMA方式传输(收发)USART数据的功能. 在多种芯片上(F0.F1.F2.F3.F4)了解过DMA模块功能的朋友可能会发现一个特点,就是DMA的功能有很多相似的地方,甚至是一样.其实,每一个模块在不同系列芯片(甚至不同厂商)基本上是大同小异,这就是所谓的触类旁通.对于软件开

scapy构造打印ARP数据包

ARP格式: 用于以太网的ARP请求/应答分组格式 各字段含义: 帧类型:表示数据部分用什么协议封装(0800表示IP,0806表示ARP,8035表示RARP). 硬件类型:表示硬件地址的类型(其中,值为1表示以太网地址,其他还可能表示令牌环地址). 硬件地址长度:指出该报文中硬件地址的长度(ARP报文中,它的值为6). 协议地址长度:指出该报文中协议地址的长度(ARP报文中,它的值为4). op:操作字段,共有4种类型(1:ARP请求,2:ARP应答,3:RARP请求,4:RARP应答).

Linux内核中网络数据包的接收-第一部分 概念和框架

与网络数据包的发送不同,网络收包是异步的的,因为你不确定谁会在什么时候突然发一个网络包给你,因此这个网络收包逻辑其实包含两件事:1.数据包到来后的通知2.收到通知并从数据包中获取数据这两件事发生在协议栈的两端,即网卡/协议栈边界以及协议栈/应用边界:网卡/协议栈边界:网卡通知数据包到来,中断协议栈收包:协议栈栈/应用边界:协议栈将数据包填充socket队列,通知应用程序有数据可读,应用程序负责接收数据.本文就来介绍一下关于这两个边界的这两件事是怎么一个细节,关乎网卡中断,NAPI,网卡poll,

Linux内核中网络数据包的接收-第二部分 select/poll/epoll

和前面文章的第一部分一样,这些文字是为了帮别人或者自己理清思路的,而不是所谓的源码分析,想分析源码的,还是直接debug源码最好,看任何文档以及书都是下策.因此这类帮人理清思路的文章尽可能的记成流水的方式,尽可能的简单明了. Linux 2.6+内核的wakeup callback机制 Linux 内核通过睡眠队列来组织所有等待某个事件的task,而wakeup机制则可以异步唤醒整个睡眠队列上的task,每一个睡眠队列上的节点都拥有一个 callback,wakeup逻辑在唤醒睡眠队列时,会遍历

sk_buff封装和解封装网络数据包的过程详解

可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过<TCP/IP详解 卷2>的都知道),那么sk_buff是什么呢?       sk_buff就是网络数据包本身以及针对它的操作元数据.       想要理解sk_buff,最简单的方式就是凭着自己对网络协议栈的理解封装一个直到以太层的数据帧并且成功发送出去,个人认为这比看代码/看文档或者在网上搜资料强多了.当然,网上已经有了大量的这方面的

sk_buff封装和解封装网络数据包的过程详解(转载)

http://dog250.blog.51cto.com/2466061/1612791 可以说sk_buff结构体是Linux网络协议栈的核心中的核心,几乎所有的操作都是围绕sk_buff这个结构体进行的,它的重要性和BSD的mbuf类似(看过<TCP/IP详解 卷2>的都知道),那么sk_buff是什么呢?       sk_buff就是网络数据包本身以及针对它的操作元数据.       想要理解sk_buff,最简单的方式就是凭着自己对网络协议栈的理解封装一个直到以太层的数据帧并且成功发

linux下打开关闭数据包转发

Linux下默认是禁止数据包转发的,但在某些特殊场合需要使用这一功能,所谓转发即当主机拥有多于一块的网卡时,其中一块收到数据包,根据数据包的目的ip地址将包发往本机另一网卡,该网卡根据路由表继续发送数据包.这通常就是路由器所要实现的功能. 使能数据转发功能: echo 1 > /proc/sys/net/ipv4/ip_forward 禁止数据转发功能: echo 0 > /proc/sys/net/ipv4/ip_forward 版权声明:本文为博主原创文章,未经博主允许不得转载.

ARP数据包

结构ether_header定义了以太网帧首部:结构arphdr定义了其后的5个字段,其信息用于在任何类型的介质上传送ARP请求和回答:ether_arp结构除了包含arphdr结构外,还包含源主机和目的主机的地址. 定义常量 #define EPT_IP   0x0800    /* type: IP */#define EPT_ARP   0x0806    /* type: ARP */#define EPT_RARP 0x8035    /* type: RARP */#define A