python-arp-request

import sys

from scapy.layers.l2 import Ether, ARP
from scapy.sendrecv import srp
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)#清除报错

localmac = '00:0c:29:c8:c1:c8'
localip = '172.16.20.122'
destip = '172.16.20.254'
ifname = 'eth0'
#源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, timeout = 1, verbose = False)
#print(result_raw[0].res[0][1].getlayer(ARP).fields['hwsrc'])
#(<Results: TCP:0 UDP:0 ICMP:0 Other:1>, <Unanswered: TCP:0 UDP:0 ICMP:0 Other:0>)
#print(result_raw[0])
#<Results: TCP:0 UDP:0 ICMP:0 Other:1>
#print(type(result_raw[0]))
#<class 'scapy.plist.SndRcvList'>
#res是<class 'scapy.plist.SndRcvList'>的方法,产生收发数据的清单
result_list = result_raw[0].res
#提取[0],第一个元组(收发数据),元组内包含发送数据包,和一个或者多个接收数据包
#这是一个清单,清单内的item为元组,元组由发送数据包,和一个或者多个接收数据包组成

print('IP地址: ' + result_list[0][1][1].fields['psrc'] + ' MAC地址: ' + result_list[0][1][1].fields['hwsrc'])

猜你喜欢

转载自blog.csdn.net/weixin_44019506/article/details/104791331
arp