发布于2020-02-21 15:33 阅读(1857) 评论(0) 点赞(29) 收藏(4)
主要思路:
1.通过python psutil模块,并对网卡名称进行筛选得到对应网卡的IP地址和MAC地址
2.使用scapy库中的srp()函数发送二层数据包并获得返回值
3.使用type()函数分析返回值类型,查询对应的类中的方法,来提取关键信息
发送包的属性可以在scapy中查询,如:
查询本机对应网卡,IP,MAC 代码:
- import psutil
- def get_local(ifname):
- dic = psutil.net_if_addrs()
- for adapter in dic:
- if adapter == ifname:
- snicList = dic[adapter]
- mac = '无 mac 地址'
- ipv4 = '无 ipv4 地址'
- ipv6 = '无 ipv6 地址'
- for snic in snicList:
- if snic.family.name in {'AF_LINK', 'AF_PACKET'}:
- mac = snic.address
- elif snic.family.name == 'AF_INET':
- ipv4 = snic.address
- elif snic.family.name == 'AF_INET6':
- ipv6 = snic.address
- return (adapter,ipv4,mac)
测试:
ARP协议代码:
- import sys
- import logging
- logging.getLogger('scapy.runtime').setLevel(logging.ERROR)#不显示报错
- from scapy.all import *
- from get_local_ip import get_local
- def get_arp(destip,ifname='以太网'):
- resnet = get_local(ifname)
- localmac = resnet[2].replace('-',':')
- localip = resnet[1]
- ifname = resnet[0]
- 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)
- return result_raw[0].res[0][1].getlayer(ARP).fields
- if __name__ == "__main__":
- if len(sys.argv) > 1:#一个参数的时候参数为IP,网卡默认为以太网
- ipaddress = sys.argv[1]
- result = get_arp(ipaddress)
- print('ip : ' + ipaddress)
- print('mac : ' + result['hwsrc'])
- if len(sys.argv) > 2:#两个参数的时候,第一个参数为IP,第二个参数为网卡
- ipaddress = sys.argv[1]
- ifname = sys.argv[2]
- result = get_arp(ipaddress,ifname)
- print('ip : ' + ipaddress)
- print('mac : ' + result['hwsrc'])
测试:
首先在命令行arp -a一下
抓包分析:
广播发包:
单播回包:
作者:goodbody
链接:https://www.pythonheidong.com/blog/article/231940/7d704153b66c4106a839/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!