程序员最近都爱上了这个网站  程序员们快来瞅瞅吧!  it98k网:it98k.com

本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长

+关注
已关注

分类  

yield(0)

面向对象(0)

标签  

字典(0)

列表(0)

日期归档  

python网络编程——实现ARP协议

发布于2020-02-21 15:33     阅读(1857)     评论(0)     点赞(29)     收藏(4)


主要思路:

1.通过python psutil模块,并对网卡名称进行筛选得到对应网卡的IP地址和MAC地址

2.使用scapy库中的srp()函数发送二层数据包并获得返回值

3.使用type()函数分析返回值类型,查询对应的类中的方法,来提取关键信息

发送包的属性可以在scapy中查询,如:

查询本机对应网卡,IP,MAC 代码:

  1. import psutil
  2. def get_local(ifname):
  3. dic = psutil.net_if_addrs()
  4. for adapter in dic:
  5. if adapter == ifname:
  6. snicList = dic[adapter]
  7. mac = '无 mac 地址'
  8. ipv4 = '无 ipv4 地址'
  9. ipv6 = '无 ipv6 地址'
  10. for snic in snicList:
  11. if snic.family.name in {'AF_LINK', 'AF_PACKET'}:
  12. mac = snic.address
  13. elif snic.family.name == 'AF_INET':
  14. ipv4 = snic.address
  15. elif snic.family.name == 'AF_INET6':
  16. ipv6 = snic.address
  17. return (adapter,ipv4,mac)

测试:

ARP协议代码:

  1. import sys
  2. import logging
  3. logging.getLogger('scapy.runtime').setLevel(logging.ERROR)#不显示报错
  4. from scapy.all import *
  5. from get_local_ip import get_local
  6. def get_arp(destip,ifname='以太网'):
  7. resnet = get_local(ifname)
  8. localmac = resnet[2].replace('-',':')
  9. localip = resnet[1]
  10. ifname = resnet[0]
  11. result_raw = srp(Ether(src=localmac,dst='FF:FF:FF:FF:FF:FF')/ARP(op=1,hwsrc=localmac,psrc=localip,hwdst='00:00:00:00:00:00',pdst=destip),iface=ifname,verbose=False)
  12. return result_raw[0].res[0][1].getlayer(ARP).fields
  13. if __name__ == "__main__":
  14. if len(sys.argv) > 1:#一个参数的时候参数为IP,网卡默认为以太网
  15. ipaddress = sys.argv[1]
  16. result = get_arp(ipaddress)
  17. print('ip : ' + ipaddress)
  18. print('mac : ' + result['hwsrc'])
  19. if len(sys.argv) > 2:#两个参数的时候,第一个参数为IP,第二个参数为网卡
  20. ipaddress = sys.argv[1]
  21. ifname = sys.argv[2]
  22. result = get_arp(ipaddress,ifname)
  23. print('ip : ' + ipaddress)
  24. print('mac : ' + result['hwsrc'])

测试:

首先在命令行arp -a一下

抓包分析:

广播发包:

单播回包:

发布了25 篇原创文章 · 获赞 16 · 访问量 8329


所属网站分类: 技术文章 > 博客

作者:goodbody

链接:https://www.pythonheidong.com/blog/article/231940/7d704153b66c4106a839/

来源:python黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

29 0
收藏该文
已收藏

评论内容:(最多支持255个字符)