ARP Implementation

>>> 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++试一下

posted @ 2014-04-26 17:15  Chocor  阅读(155)  评论(0)    收藏  举报