>>> ARP()
<ARP |>
>>> _.show()
###[ ARP
]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op=
who-has
hwsrc= ec:a8:6b:c4:bd:b0
psrc= 110.196.80.223
hwdst=
00:00:00:00:00:00
pdst= 0.0.0.0
Scapy中ARP包的结构如上,windows下arp -a 打印出来的arp缓存比较完整,但是在同样网络下,ubuntu打印结果只有网关的记录,令人好奇。于是想着用scapy实现以下打印同一网关下所有主机的IP-MAC地址。不知道TCP/IP的实现是怎样的,一开始的想法,就是只发送一个包,Ether层是广播的,IP层也做成广播,即 Ether()/ARP(pdst=‘255.255.255.255‘),不过在scapy下试了一下,没成功,没有返回的包,也不知道为什么。只能用遍历了...
#script pkts = [] #construct a list of arp packets for i in range(256): pkts.append(ARP(pdst=‘10.196.80.‘ + str(i))) #parameter timeout is necessary here ans, unans = sr(pkts, timeout=5) ans.show()
悲剧的是,和在terminal中输入arp -a的结果一样,还是仅有一个网关,只能以后再说了
怀疑可能和scapy这个包有关,有空用C/C++试一下
ARP Implementation,布布扣,bubuko.com
原文:http://www.cnblogs.com/Chocor/p/3691781.html